IOException:已建立的连接被主机中的软件中止
Posted
技术标签:
【中文标题】IOException:已建立的连接被主机中的软件中止【英文标题】:ERR_INVALID_CHUNKED_ENCODING 200 machine 【发布时间】:2022-01-15 17:45:30 【问题描述】:我想使用带有 ajax 的 Spring Boot 从数据库中获取数据,但出现错误 500
。我检查了所有代码,但找不到服务器出错的原因。我可以在workbench
中检查下面的 sql 查询,它得到了完美的输出,但是 spring boot 触发错误。
Chrome 控制台:
GET http://localhost:8099/wholikepost?pstId=25 net::ERR_INVALID_CHUNKED_ENCODING 200
下面是我的代码:
存储库和服务
// Repository
public interface PostLikeRepo extends JpaRepository<LikePost, Integer>
@Query(nativeQuery = true, value = "SELECT * FROM like_master WHERE post_id = ?")
public List<LikePost> getTotalLikePopup(Integer id);
// Service
public class SomeServiceImpl implements SomeService
@Autowired
private PostLikeRepo PostLikeRepo;
public List<LikePost> getTotalLikePopup(Integer Id)
return this.PostLikeRepo.getTotalLikePopup(Id);
控制器
@RequestMapping(value = "/wholikepost", method = RequestMethod.GET)
@ResponseBody
public List<LikePost> getTotalLikePopup(HttpServletRequest req)
List<LikePost> getWhoLikePost = this.SomeService.getTotalLikePopup(Integer.parseInt(req.getParameter("pstId")));
return getWhoLikePost;
Ajax 请求
$(".like-style").on('click', function()
let postId = parseInt($(this).attr("id").split("le")[1]); // get post id perfect
$.ajax(
type: "GET",
url: "/wholikepost",
data: pstId: postId ,
success: function(res)
console.log(res);
);
);
堆栈跟踪
Caused by: java.io.IOException: An established connection was aborted by the software in your host machine
at java.base/sun.nio.ch.SocketDispatcher.write0(Native Method) ~[na:na]
at java.base/sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:54) ~[na:na]
at java.base/sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:113) ~[na:na]
at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:79) ~[na:na]
at java.base/sun.nio.ch.IOUtil.write(IOUtil.java:50) ~[na:na]
at java.base/sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:532) ~[na:na]
at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:135) ~[tomcat-embed-core-9.0.50.jar:9.0.50]
at org.apache.tomcat.util.net.NioEndpoint$NiosocketWrapper.doWrite(NioEndpoint.java:1364) ~[tomcat-embed-core-9.0.50.jar:9.0.50]
at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:766) ~[tomcat-embed-core-9.0.50.jar:9.0.50]
at org.apache.tomcat.util.net.SocketWrapperBase.writeBlocking(SocketWrapperBase.java:586) ~[tomcat-embed-core-9.0.50.jar:9.0.50]
at org.apache.tomcat.util.net.SocketWrapperBase.write(SocketWrapperBase.java:530) ~[tomcat-embed-core-9.0.50.jar:9.0.50]
at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.doWrite(Http11OutputBuffer.java:547) ~[tomcat-embed-core-9.0.50.jar:9.0.50]
at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:112) ~[tomcat-embed-core-9.0.50.jar:9.0.50]
at org.apache.coyote.http11.Http11OutputBuffer.doWrite(Http11OutputBuffer.java:194) ~[tomcat-embed-core-9.0.50.jar:9.0.50]
at org.apache.coyote.Response.doWrite(Response.java:615) ~[tomcat-embed-core-9.0.50.jar:9.0.50]
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:340) ~[tomcat-embed-core-9.0.50.jar:9.0.50]
... 67 common frames omitted
【问题讨论】:
【参考方案1】:99% 的几率您会受到以下问题的影响
您的 LikePost
实体通过 @ManyToMany
或 @OneToMany
注释具有循环依赖关系,因此在转换为 JSON 响应时,它会面临堆栈溢出错误,然后隐藏在与客户端的关闭连接后面。
已经有类似事件here
检查您是否可以在您的某些@ManyToMany
或@OneToMany
中添加@JsonIgnore
,以及这是否可以消除错误。那么您就可以 100% 确定这是原因所在。
【讨论】:
以上是关于IOException:已建立的连接被主机中的软件中止的主要内容,如果未能解决你的问题,请参考以下文章
Caused by: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
java.io.IOException: 您的主机中的软件中止了一个已建立的连接
org.apache.catalina.connector.ClientAbortException: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
解决Java使用response下载文件报错,并总结可能出错的原因: java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
java.io.IOException: 你的主机中的软件中止了一个已建立的连接。 (踩坑经历)
ClientAbortException: java.io.IOException: 您的主机中的软件中止了一个已建立的连接。,进不了Debug,访问不到方法