gpt4 book ai didi

java - Spring Rest 模板 - 来自 Web 服务的 204 内容响应

转载 作者:太空宇宙 更新时间:2023-11-04 11:13:57 24 4
gpt4 key购买 nike

我有一个休息服务,并使用 Spring 的 RestTemplate 和 Apache HttpClient 来使用,

    @Autowired
public ClientImpl(@Value("${base-uri}") final String baseUrl,
@Qualifier("restOperations") RestOperations restTemplate) {
serviceUrl = baseUrl;
restTemplate = restTemplate;
}

private List<ResponseDetails> processRequest(CustomRequest request) throws Exception {
ResponseEntity<ResponseDetails[]> responseEntity = restTemplate.exchange(serviceUrl, HttpMethod.POST, entity, ResponseDetails[].class);
if (responseEntity.getStatusCode().value() == 204) {
return Collections.<ResponseDetails>emptyList();
}
ResponseDetails[] response = responseEntity.getBody();
return response != null ? Lists.newArrayList(response) : Collections.<ResponseDetails>emptyList();
}

当 Web 服务返回 204 响应时,204 响应后的第二个服务调用将失败并出现读取超时。

Spring-web:4.3.5

我无法找出原因。有什么帮助吗?

编辑:从调试日志来看,

org.apache.http.impl.conn.DefaultHttpResponseParser;Garbage in response: ÿþ{"id":0}HTTP/1.1 204 Could not find

httpclient 在服务器日志中的响应:

<204 No Content,{Cache-Control=[no-cache], Pragma=[no-cache], Content-Type=[application/json; charset=utf-16], Expires=[-1], Server=[some], X-AspNet-Version=[someversion], X-Powered-By=[ASP.NET], Date=[somedate]}>

最佳答案

HTTP 204 是“无内容”的状态代码,但响应中似乎存在垃圾内容。这可以在您的日志中看到:

ÿþ{"id":0}

这就是您遇到问题的原因。

HTTP 客户端不期望 204 响应的正文内容中有任何内容,因此不会读取它,因此响应处理程序不会看到有任何垃圾。然而,由于存在尚未消耗的垃圾,因此连接保持打开状态,直到读取 -> 尝试重用该连接的下一个连接会遇到读取超时。

有一个separate thread about a similar problem ,其中问题是通过自定义 HTTP 请求执行器解决的。使用这样的执行器,您可以调用 getBody() 来获取垃圾响应正文,然后下次请求就不会出现任何问题。

关于java - Spring Rest 模板 - 来自 Web 服务的 204 内容响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45687123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com