我遇到了在Spring 5中使用REST服务的问题。场景:用户在屏幕上更新一两个字段并单击一个按钮。这会调用一个Spring控制器,它依次进行两次REST调用以收集信息然后返回给浏览器。我们当前的生产版本使用Spring 4并且运行良好。但升级到5之后,服务调用将失败,除非我将服务器置于调试模式并通过执行两次调用的代码部分进行调试。如果我调试,它按预期工作。如果我不调试,我会得到NullPointerException,因为代码使用REST调用检索到的信息,因为它在REST服务返回信息之前关闭了连接。也许我错过了一个新的依赖,或者当我从4升级到Spring 5时忽略了一些东西,但是我从来没有见过这样的东西。
编辑:这是负责REST服务调用的代码:
ResponseEntity<String> entity = restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<String>(){});
restTemplate是org.springframework.web.client.RestTemplate的自动装配实例。无论呼叫是否完成,我总是得到一个ResponseEntity。但是当调用提前终止时,正文数据为空,这是不正确的。将始终存在通过调用返回的正文数据,并且Spring 4始终正确捕获它。 Spring 5只在我通过代码调试时才正确捕获它,但在正常执行期间失败 - 我在检查捕获的数据时看到了这一点。
答案 0 :(得分:0)
发现了一个解决方案 - 问题可能存在于我的JDK版本中。我将请求工厂切换到HttpComponentsClientHttpRequestFactory,瞧,没问题。