我有POST请求以使用WebFlux WebClient的类似REST的服务。该服务以常见的JSON格式返回响应,例如:
{
"status": "OK",
"data": []
}
现在,对于每个端点的每个WebClient调用,我都想执行通用验证以检查status ==“ OK”。我是否需要为每个端点分别调用验证,例如
myClient.post().uri("/myEndpoint1")
//..
.retrieve()
.bodyToMono(MyResponse.class)
.map(this::validateResponse)
//..
或者有一种在创建WebClient时添加一些常见处理的方法。我尝试使用过滤器
this.myClient = WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(HttpClient.create().wiretap()))
.filter(ExchangeFilterFunction.ofResponseProcessor(this::validateMyResponseAsFilter))
.baseUrl(mybaseUrl)
.build();
validateMyResponseAsFilter在哪里
private Mono<ClientResponse> validateMyResponseAsFilter(ClientResponse resp) {
return resp.bodyToMono(MyResponse.class)
.flatMap(myResponse -> "OK".equals(myResponse.getStatus()) ? Mono.just(resp) : Mono.error(new RuntimeException()));
}
但这会导致
org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'application/octet-stream' not supported for bodyType=my.package.MyResponse
答案 0 :(得分:0)
原来,我连接的服务没有返回Content-Type标头。修复服务后,代码可以正常工作。