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;
    }
posted @ 2024-04-19 16:09  vx_guanchaoguo0  阅读(73)  评论(0编辑  收藏  举报