我正在尝试从请求正文中获取简单的字符串,但始终会出现错误
处理程序:
@RestController
public class GreetingHandler {
public Mono<ServerResponse> hello(ServerRequest request) {
String contentType = request.headers().contentType().get().toString();
String body = request.bodyToMono(String.class).toString();
return ServerResponse.ok().body(Mono.just("test"), String.class);
}
}
路由器:
@Configuration
public class GreetingRouter {
@Bean
public RouterFunction<ServerResponse> route(GreetingHandler greetingHandler) {
return RouterFunctions
.route(RequestPredicates.POST("/hello"),greetingHandler::hello);
}
}
请求有效,我可以看到contenType(plainTexT),并且在邮递员中得到响应,但是我无法到达请求正文。我收到的最常见错误是MonoOnErrorResume。如何将正文从请求转换为字符串?
答案 0 :(得分:0)
您可以使用@RequestBody
注释吗?
public Mono<ServerResponse> hello(@RequestBody String body, ServerRequest request) {
String contentType = request.headers().contentType().get().toString();
return ServerResponse.ok().body(Mono.just("test"), String.class);
}
答案 1 :(得分:0)
您将必须阻塞才能到达实际的主体字符串:
var newTodoArray = this.state;
newTodoArray.remove(id);
this.setState({
todos: newTodoArray,
});
String body = request.bodyToMono(String.class).block();
只会为您提供toString()
对象的字符串表示形式。
这是块的作用: https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html#block--
更新:
我不知道无法在http线程上进行阻塞了(是吗?)。
这是您的Mono
控制器方法的适应版本,该方法在控制台上显示“ Hello yourInput”,并在响应中返回该字符串。
hello