WebFlux 中form data获取不到参数问题
官网并不提供form data
以下方式获取
@RequestMapping(path = "/post", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
public Mono<Map<String, Object>> post(ServerWebExchange exchange,
@RequestBody(required = false) String body) throws IOException {
HashMap<String, Object> ret = new HashMap<>();
ret.put("headers", getHeaders(exchange));
ret.put("data", body);
HashMap<String, Object> form = new HashMap<>();
ret.put("form", form);
return exchange.getFormData().flatMap(map -> {
for (Map.Entry<String, List<String>> entry: map.entrySet()) {
for (String value : entry.getValue()) {
form.put(entry.getKey(), value);
}
}
return Mono.just(ret);
});
}
获取全部表单 响应式编程 不能被阻塞
@RequestMapping(path = "/token", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
private static Mono<MultiValueMap<String, String>> getFormData(ServerWebExchange serverWebExchange) {
return serverWebExchange.getFormData().flatMap(formData -> {
MultiValueMap<String, String> formDataResponse = new LinkedMultiValueMap<>();
formDataResponse.addAll(formData);
return Mono.just(formDataResponse);
});
}
使用 webclient测试
@GetMapping(value = "/products-non-blocking", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<Product> getProductsNonBlocking() {
log.info("Starting NON-BLOCKING Controller!");
Flux<Product> productFlux = WebClient.create()
.get()
.uri("http://localhost:9000/users/slow-service-products")
.retrieve()
.bodyToFlux(Product.class);
productFlux.subscribe(product -> log.info("response body: ===" + product.toString()));
log.info("Exiting NON-BLOCKING Controller!");
return productFlux;
}
本文来自博客园,作者:vx_guanchaoguo0,转载请注明原文链接:https://www.cnblogs.com/guanchaoguo/p/18146189