私は春のリアクティブ初心者です。
Postmanを使用してサーバーからリクエスト情報を取得しようとしています。
まず、postmanはpostメソッドを使用してサーバーに情報を送信します。次に、関連するコードを使用してサーバー側で作業し、リクエスト情報を取得しています。
次のコードスニペットでは
ServerRequest関数のJSONObjectを取得できるかどうか疑問に思います。
郵便配達員の体(アプリケーション/ json)
{
"name": "aaaa",
"name_order": ["aa", "bb", "cc"],
"type": "12",
"query": ""
}
Java(RouterFunction)
import com.ntels.io.input.handler.RestInHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.web.reactive.config.EnableWebFlux;
import org.springframework.web.reactive.config.WebFluxConfigurer;
import org.springframework.web.reactive.function.server.*;
import static org.springframework.web.reactive.function.server.RequestPredicates.GET;
import static org.springframework.web.reactive.function.server.RequestPredicates.POST;
import static org.springframework.web.reactive.function.server.RequestPredicates.PUT;
import static org.springframework.web.reactive.function.server.RequestPredicates.DELETE;
@Configuration
@EnableWebFlux
public class RestConfig implements WebFluxConfigurer {
@Bean
public RouterFunction<ServerResponse> routes(RestInHandler restInHandler){
return RouterFunctions.route(POST("/input/event").
and(RequestPredicates.accept(MediaType.APPLICATION_JSON)), restInHandler::toRESTInVerticle);
}
}
Java(ハンドラー)
public Mono<ServerResponse> toRESTInVerticle(ServerRequest serverRequest) {
String serverRequestUrl = serverRequest.uri().toString();
System.out.println("RestInHandler test in");
System.out.println(serverRequest.method());
System.out.println(serverRequest.headers());
System.out.println(serverRequest.uri().toString());
// how can i get the jsonbody using serverrequest
// testing..
// Mono<JSONObject> jsonObjectMono = serverRequest.bodyToMono(JSONObject.class);
// Flux<JSONObject> jsonObjectFlux = serverRequest.bodyToFlux(JSONObject.class);
-> MonoOnErrorResume
return (Mono<ServerResponse>) ServerResponse.ok();
}
ありがとうございました。 Alexander Terekhov
あなたの答えは、問題を解決するのに大いに役立ちました。
私のテストコード。
RouterFunction =既存のコードと同じです。
ハンドラ
public Mono<ServerResponse> toRESTInVerticle(ServerRequest serverRequest) {
String uri = serverRequest.uri().toString();
String method = serverRequest.methodName();
String contentType = serverRequest.headers().contentType().get().toString();
String characterSet = serverRequest.headers().acceptCharset().get(0).toString();
JSONObject bodyData = serverRequest.bodyToMono(JSONObject.class).toProcessor().peek();
System.out.println("==========toRESTInVerticle Data Check==========");
System.out.println(uri);
System.out.println(method);
System.out.println(contentType);
System.out.println(characterSet);
System.out.println(bodyData);
System.out.println("======toRESTInVerticle Data Check Complete======");
return Mono.empty();
}
そして、以下に示すコンソールでの結果:-
==========toRESTInVerticle Data Check==========
http://localhost:8082/input/event/check
POST
application/json
UTF-8
{"event_type":"12","event_name_order":["aa","bb","cc"],"event_query":"","event_name":"aaaa","init_value":"","init_value_yn":"N","event_descp":"ddd"}
======toRESTInVerticle Data Check Complete======
ハッピーコーディングありがとうございます。
次の方法で一種の「コールバック」を登録してみることができると思います。
_ return request.bodyToMono(JSONObject.class)
.doOnNext(jsonObject -> // testing..)
.then(ServerResponse.ok().build());
_
また、ServerResponse.ok()
を_Mono<ServerResponse>
_にキャストしていることに気づきました。キャストしないと思います。 ServerResponse.ok().build()
を使用して_Mono<ServerResponse>
_を作成します。