i'm spring reactive newbie.
I am trying to use postman to get request information from the server.
First, postman sends information to the server using the post method. Second, we've been working on the server side with the relevant code and getting the request information.
In the following code snippet
I wonder if I can get the JSONObject of the ServerRequest function.
postman body(application/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 (Handler)
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();
}
thank you. Alexander Terekhov
Your answer has been a lot of help in solving the problem.
My Test Code.
RouterFunction = Same as existing code.
Handler
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();
}
and the result in console as provided below :-
==========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======
Happy Coding Thank you.
Updated.
Thank you. @Zon Comments. toProcessor is deprecated now - prefer share() to share a parent subscription, or use Sinks https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html#toProcessor-- Please refer to this url as well.