使用 BodyInserters 向 webClient 传递参数

Using BodyInserters to pass parameter with webClient

有我的代码。

public Mono<RespDto> function(TransReqDto1 reqDto1, TransReqDto2 reqDto2, String token) {

    MultipartBodyBuilder builder = new MultipartBodyBuilder();
    builder.part("TransReqDto1", reqDto1);
    builder.part("TransReqDto2", reqDto2);

    MultiValueMap<String, HttpEntity<?>> parts = builder.build();

    LinkedMultiValueMap map = new LinkedMultiValueMap();
    map.add("TransReqDto1", reqDto1);
    map.add("TransReqDto2", reqDto2);

    return
            client.post()
                    .uri("/api")
                    .body(BodyInserters.fromValue(reqDto1))
                    .headers(h -> h.setBearerAuth(token.split(" ")[1]))
                    .retrieve()
                    .bodyToMono(RespDto.class);
       
}

我的问题是我需要同时发送 reqDto1 和 reqDto2。我已经使用上面的代码成功发送了 reqDto1,但我想不出发送两个对象的方法。 尝试了 MultipartBodybuild 和 MultiValueMap,但两者都从目标 API 返回错误。请给我一些提示!!谢谢

这是我要拨打的 API!

@PostMapping("")
@ApiOperation(value = "test", notes = "test")
public Mono<?> transPost(@Valid @RequestBody TransReqDto1 reqDto1,
                         @Valid @RequestBody TransReqDto2 reqDto2) {
    return testService.function(reqDto1, reqDto2);
}

您不能使用两个 @RequestBody。它只能绑定到单个对象。预期的方法是创建一个包含所有相关数据的包装器 DTO:

public class TransReqDto {

  private TransReqDto1 transReqDto1;
  private TransReqDto2 transReqDto2;
//...
}