gpt4 book ai didi

java - Spring Reactive 使用 ServerRequest 获取正文 JSONObject

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:06 25 4
gpt4 key购买 nike

我是 spring 响应式(Reactive)新手。

我正在尝试使用 postman 从服务器获取请求信息。

首先,postman使用post方法向服务器发送信息。其次,我们一直在服务器端进行相关代码的工作,并获取请求信息。

在下面的代码片段中

不知道能不能拿到ServerRequest函数的JSONObject

postman 正文(应用程序/json)

{
"name": "aaaa",
"name_order": ["aa", "bb", "cc"],
"type": "12",
"query": ""
}

java (路由函数)

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======

祝您编码愉快。


已更新。

谢谢。 @Zon 评论。toProcessor 现在已弃用 - 更喜欢 share() 来共享父订阅,或使用 Sinks https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html#toProcessor--请同时引用此网址。

关于java - Spring Reactive 使用 ServerRequest 获取正文 JSONObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52870517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com