能否使用RestTemplate从Spring MVC应用程序调用Spring WebFlux API?
我得到了一个200响应,但是正文为null,这不是对象映射问题,因为此时我只是尝试返回一个字符串。如果我在浏览器或Postman中对WebFlux API进行相同的请求,则正文与预期相符。
有没有办法让RestTemplate起作用?我现在不想更新所有应用程序到WebFlux。
能否使用RestTemplate从Spring MVC应用程序调用Spring WebFlux API?
我得到了一个200响应,但是正文为null,这不是对象映射问题,因为此时我只是尝试返回一个字符串。如果我在浏览器或Postman中对WebFlux API进行相同的请求,则正文与预期相符。
有没有办法让RestTemplate起作用?我现在不想更新所有应用程序到WebFlux。
由于它使用HTTP协议,您可以使用RestTemplate或任何其他HttpClient来与WebFlux REST API进行通信,无论您使用哪种语言。
如果请求在Postman中正常工作,则可以尝试围绕RestTemplate调试代码以查看发生了什么。
你说得对!如果使用restTemplate调用时检查响应头,content-size为0!如果你调试restTemplate,你会注意到当内容大小为0时,提取器会返回null作为body。
我找不到解决办法,似乎唯一的解决方案是使用WebClient。无论如何,RestTemplate很快就会过时,但我同意当你返回Mono<Void>
时,你的服务客户端应该知道不要使用RestTemplate,这真的很烦人。
这里是MessageBodyClientHttpResponseWrapper实现ClientHttpResponse
类中的代码,如果内容长度为0,则返回false:
public boolean hasMessageBody() throws IOException {
HttpStatus status = HttpStatus.resolve(getRawStatusCode());
if (status != null && (status.is1xxInformational() || status == HttpStatus.NO_CONTENT ||
status == HttpStatus.NOT_MODIFIED)) {
return false;
}
if (getHeaders().getContentLength() == 0) {
return false;
}
return true;
}