是否可以使用RestTemplate从Spring MVC应用程序调用Spring WebFlux API?
我得到200响应,但是主体为null,这不是对象映射问题,因为此时我只是想返回一个字符串。如果我在浏览器或邮递员中对WebFlux API发出相同的请求,则正文是预期的。
有没有办法让RestTemplate工作?我现在不需要立即将所有应用程序都更新为WebFlux。
答案 0 :(得分:0)
由于它使用的是HTTP协议,因此您绝对可以从想要与WebFlux REST API进行通信的任何语言中使用RestTemplate甚至任何其他HttpClient。
如果邮递员的请求正在处理,那么您可以尝试围绕RestTemplate调试代码以查看发生了什么。
答案 1 :(得分:0)
您是对的!如果检查响应头,则使用restTemplate调用时的content-size为0!而且,如果您调试restTemplate,则在内容大小为0时会在提取器中注意到,它将为主体返回null。
我找不到解决办法,似乎唯一的解决方案是使用WebClient。无论如何,RestTemplate将很快弃用,但是我同意这很烦人,您的服务客户端应该知道在返回Mono<Void>
时不要使用RestTemplate。
这是MessageBodyClientHttpResponseWrapper implements 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;
}