使用RestTemplate调用WebFlux微服务

时间:2019-12-17 20:20:23

标签: spring-mvc resttemplate spring-webflux

是否可以使用RestTemplate从Spring MVC应用程序调用Spring WebFlux API?

我得到200响应,但是主体为null,这不是对象映射问题,因为此时我只是想返回一个字符串。如果我在浏览器或邮递员中对WebFlux API发出相同的请求,则正文是预期的。

有没有办法让RestTemplate工作?我现在不需要立即将所有应用程序都更新为WebFlux。

2 个答案:

答案 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;
}