使用 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;
//...
}
有我的代码。
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;
//...
}