我正在使用 Spring Web Flux 实现一个处理程序函数,并希望提取 POST-Body 的值x-www-form-urlencoded。
public Mono<ServerResponse> handle(ServerRequest incomingHttpRequest) {
Mono<MultiValueMap<String, String>> formData = incomingHttpRequest.body(BodyExtractors.toFormData());
return formData
.doOnEach(signal -> {LOG.info("EACH: " + signal.getType());})
.doOnSubscribe(x -> {LOG.info("SUBSCRIBED");})
.doOnNext(next -> {LOG.info("NEXT: " + next);})
.doOnError(x -> {LOG.info("ERROR: " + x.getMessage());})
.doOnSuccess(x -> {LOG.info("SUCCESS: " + x);})
.flatMap(multiValueMap -> ServerResponse
.badRequest()
.body(BodyInserters.fromObject(
"searchTerm: " + multiValueMap.getFirst("searchTerm")
))
);
}
处理程序添加到路由器中,如下所示:
return RouterFunctions.route(RequestPredicates.POST("/mysearch"), searchHandler::handle);
我希望得到一个包含 searchTerm 的 BAD_REQUEST。但我得到的是 200。
对我来说,看起来生成的 Mono 已被订阅,然后成功完成。但formData从未收到值,因此从未进入flatMap(...)
我做错了什么映射Mono<MultiValueMap<String, String>>到 a Mono<ServerResponse>?
不负相思意
Cats萌萌
相关分类