Spring WebClient 将动态请求正文作为 JSON
Spring WebClient pass dynamic request body as JSON
我想在通过 WebClient 进行 API 调用时传递通用请求正文。我在数据库中有动态键值对,例如(key1-value1,key2-value2,key3-value3)。此键值可能会增大或缩小。
有没有什么方法可以通过 JSON 请求正文调用 API 动态数据?
webClient.post().uri(uri).header(CONTENT_TYPE, APPLICATION_JSON)
.body({DYANAMIC JSON}).retrieve().onStatus(HttpStatus::isError, clientResponse -> {
return Mono.error(new Exception("error"));
}).bodyToMono(String.class);
谢谢
您可以将正文作为地图传递,在正文中您可以将其映射到 Map.class 或对象 class。
根据您的要求,您也可以传递 JsonObject。
Map<String, String> r = new HashMap<>();
webClient.post().uri(uri).header(CONTENT_TYPE, APPLICATION_JSON)
.body(Mono.just(r), Map.class).retrieve().onStatus(HttpStatus::isError, clientResponse -> {
return Mono.error(new Exception("error"));
}).bodyToMono(String.class);
如果您已经有了完整的请求正文,可以使用快捷方式bodyValue
。
Object requestBody = ...;
webClient.post()
.uri(uri)
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(requestBody)
.retrieve()
.onStatus(HttpStatus::isError, clientResponse -> {
return Mono.error(new Exception("error"));
})
.bodyToMono(String.class);
此处的文档中描述了插入请求正文:https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#webflux-client-body
注意:您也可以使用快捷方式 contentType(MediaType.APPLICATION_JSON)
而不是 header("Content-Type", MediaType.APPLICATION_JSON)
我想在通过 WebClient 进行 API 调用时传递通用请求正文。我在数据库中有动态键值对,例如(key1-value1,key2-value2,key3-value3)。此键值可能会增大或缩小。
有没有什么方法可以通过 JSON 请求正文调用 API 动态数据?
webClient.post().uri(uri).header(CONTENT_TYPE, APPLICATION_JSON)
.body({DYANAMIC JSON}).retrieve().onStatus(HttpStatus::isError, clientResponse -> {
return Mono.error(new Exception("error"));
}).bodyToMono(String.class);
谢谢
您可以将正文作为地图传递,在正文中您可以将其映射到 Map.class 或对象 class。 根据您的要求,您也可以传递 JsonObject。
Map<String, String> r = new HashMap<>();
webClient.post().uri(uri).header(CONTENT_TYPE, APPLICATION_JSON)
.body(Mono.just(r), Map.class).retrieve().onStatus(HttpStatus::isError, clientResponse -> {
return Mono.error(new Exception("error"));
}).bodyToMono(String.class);
如果您已经有了完整的请求正文,可以使用快捷方式bodyValue
。
Object requestBody = ...;
webClient.post()
.uri(uri)
.contentType(MediaType.APPLICATION_JSON)
.bodyValue(requestBody)
.retrieve()
.onStatus(HttpStatus::isError, clientResponse -> {
return Mono.error(new Exception("error"));
})
.bodyToMono(String.class);
此处的文档中描述了插入请求正文:https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#webflux-client-body
注意:您也可以使用快捷方式 contentType(MediaType.APPLICATION_JSON)
而不是 header("Content-Type", MediaType.APPLICATION_JSON)