微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Jackson 的 ObjectMapper 失败:套接字关闭

如何解决Jackson 的 ObjectMapper 失败:套接字关闭

我正在使用 Apache 的 HttpClient 来启动这样的任务:

import org.apache.http.httpentity;
import org.apache.http.client.HttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.client.methods.HttpGet;

HttpClient client = HttpClientBuilder.create().disableRedirectHandling().build();
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);
httpentity entity = response.getEntity();

此请求包含用于标识与请求相关的任务的 id。我使用 Jackson ObjectMapper 提取它。

import com.fasterxml.jackson.databind.ObjectMapper;
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNowN_PROPERTIES,false);

httpentity entity = res.getEntity();
JobStatusModel status = mapper.readValue(entity.getContent(),JobStatusModel.class);
String taskId = status.getId();

这没有问题,我在整个代码中多次使用它。我可以通过这种方式提取 taskId,没有任何问题,并使用重复调用不同的 REST API 来确定任务何时完成以获取任务状态。

当我尝试提取已完成任务的结果时发生错误。这是通过对不同 URL 的类似请求完成的:

HttpGet request = new HttpGet(url);
HttpResponse response2 = client.execute(request);
httpentity entity2 = response2.getEntity();
JobResultModel status = mapper.readValue(entity2.getContent(),JobResultModel.class);
request.releaseConnection();

最后一行失败,出现一个非常无用的异常:

java.net.socketException: socket closed

我尝试了很多方法来读取响应实体,看看有什么问题。我已经尝试使用 Postman 进行完全相同的调用,并且成功且没有问题。该错误错误JobResultModel 形式无关。使用 DeserializationFeature.FAIL_ON_UNKNowN_PROPERTIES 的配置 ObjectMapper,它甚至应该允许错误

非常感谢您的帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。