使用Spring WebClient时没有从端点接收数据,但是我可以使用curl来获取数据

时间:2019-05-23 09:44:06

标签: java reactive-programming spring-webflux spring-webclient

我有一个发出服务器端事件的端点。为了进行测试,我确定了端点,并在30秒后终止了与端点的连接。如果我卷曲端点,则将按预期方式获取所有数据:

$ curl "my/end/point"
data: {"message": "event1"}

data: {"message": "event2"}

data: {"message": "event3"}

data: {"message": "event4"}

...

但是,当我使用Springs WebClient时,没有收到数据。我使用的代码:

final WebClient webClient = WebClient.create("my/end/point");
final String result = webClient.get()
                               .retrieve()
                               .bodyToFlux(String.class)
                               .blockFirst();
System.out.println(result);

运行此代码时,我在30秒后得到以下结果:

null

请求的响应代码为200 OK。

以下示例

final StringBuilder result = new StringBuilder();
final URL url = new URL("my/end/point");
final URLConnection conn = url.openConnection();
final BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
    result.append(line);
}
rd.close();
System.out.println(result.toString());

运行30秒后显示预期结果

data: {"message": "event1"}

data: {"message": "event2"}

...

有人知道为什么WebClient的结果为空,而其他从端点获取数据的方法却不是吗?我正在使用Java 11和spring-webflux版本5.1.5。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,而不是这样做

final WebClient webClient = WebClient.create("my/end/point");

final WebClient webClient = WebClient.builder()
                                     .clientConnector(new ReactorClientHttpConnector(HttpClient.create()))
                                     .baseUrl(this.legalThingsSocketSettings.getUrl())
                                     .build();

可以正常工作,但为什么会有些混乱,因为ReactorClientHttpConnector应该是WebClient的默认客户端连接器。