使用RestTemplate调用WebFlux微服务

4

能否使用RestTemplate从Spring MVC应用程序调用Spring WebFlux API?

我得到了一个200响应,但是正文为null,这不是对象映射问题,因为此时我只是尝试返回一个字符串。如果我在浏览器或Postman中对WebFlux API进行相同的请求,则正文与预期相符。

有没有办法让RestTemplate起作用?我现在不想更新所有应用程序到WebFlux。


如果您的应用程序返回一个 Mono,则是,如果它返回一个 Flux,则不是。 - Toerktumlare
2个回答

1

由于它使用HTTP协议,您可以使用RestTemplate或任何其他HttpClient来与WebFlux REST API进行通信,无论您使用哪种语言。

如果请求在Postman中正常工作,则可以尝试围绕RestTemplate调试代码以查看发生了什么。


0

你说得对!如果使用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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接