Caused by: ***.ClientAbortException: java.io.EOFException: Unexpected EOF read on the socket 的解决办法

当使用vue-element-admin进行前后端数据链路联调时,遇到后端报ClientAbortException:java.io.EOFException:UnexpectedEOFreadonthesocket错误,原因是Mock数据配置导致的问题。解决方案包括:删除或注释掉mock-server.js中的相关代码,或者在vue.config.js中处理Mock数据设置。修改后重启前端,请求将恢复正常。

问题概述

在通过vue-element-admin进行项目的前端脚手架搭建完成后,

前后端数据链路联调时,Request 是发送到后端了,

但是后端报错,错误信息“ Caused by: org.catalina.connector.ClientAbortException: java.io.EOFException: Unexpected EOF read on the socket ”

如下图:

具体信息如下:

org.springframework.http.converter.HttpMessageNotReadableException: I/O error while reading input message; nested exception is org.apache.catalina.connector.ClientAbortException: java.io.EOFException: Unexpected EOF read on the socket
	at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:217)
	at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)
	at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)
	at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)
	at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:888)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.connector.ClientAbortException: java.io.EOFException: Unexpected EOF read on the socket
	at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:340)
	at org.apache.catalina.connector.InputBuffer.checkByteBufferEof(InputBuffer.java:632)
	at org.apache.catalina.connector.InputBuffer.readByte(InputBuffer.java:350)
	at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:84)
	at java.io.FilterInputStream.read(FilterInputStream.java:83)
	at java.io.PushbackInputStream.read(PushbackInputStream.java:139)
	at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver$EmptyBodyCheckingHttpInputMessage.<init>(AbstractMessageConverterMethodArgumentResolver.java:325)
	at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:194)
	... 49 more
Caused by: java.io.EOFException: Unexpected EOF read on the socket
	at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:743)
	at org.apache.coyote.http11.Http11InputBuffer.access$300(Http11InputBuffer.java:41)
	at org.apache.coyote.http11.Http11InputBuffer$SocketInputBuffer.doRead(Http11InputBuffer.java:1070)
	at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:102)
	at org.apache.coyote.http11.Http11InputBuffer.doRead(Http11InputBuffer.java:246)
	at org.apache.coyote.Request.doRead(Request.java:551)
	at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:336)
	... 56 more
2022-09-17 13:11:52.863  WARN 8532 --- [nio-8081-exec-7] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: I/O error while reading input message; nested exception is org.apache.catalina.connector.ClientAbortException: java.io.EOFException: Unexpected EOF read on the socket]

解决办法

关于这个问题,在Express管网文档有描述,如下图:

 因为发送的是Post请求,提交的是Body表单,

由上图可知,这样定义的目的是解析vue-element-admin脚手架的mock中定义的json数据,

在mock-server.js中请求的Body就被解析掉了,

而现在是需求Body表单数据请求到后端,

修改方法有两种:

第一种:mock-server.js

如果以后项目中都不用Mock数据了,直接删除掉,

如果以后项目中可能还需要继续使用Mock数据,则可以先把以上两行注释掉即可,

如下图:

第二种:vue.config.js

注释掉mock-server.sj,

如下图:

以上任意一种办法都可行,

修改完成后,需要重启前端,再次请求数据联调接口,就可以正常访问了,如下图:

 

参考:

Express4.x-API Reference


好了,关于 Caused by: ***.ClientAbortException: java.io.EOFException: Unexpected EOF read on the socket 的解决办法  就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。 
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。


作       者:华    仔
联系作者:who.seek.me@java98k.vip
来        源:优快云 (Chinese Software Developer Network)
原        文:https://blog.youkuaiyun.com/Hello_World_QWP/article/details/126904256
版权声明:本文为博主原创文章,请在转载时务必注明博文出处!
<think> 我们正在解决的是在运行某个程序(可能是名为“cs setup”的工具)时出现的错误: Caused by: java.io.EOFException: Unexpected end of ZLIB input stream 这个错误表示程序在读取一个使用ZLIB压缩(如GZIP格式)的数据流时,遇到了意外的结束,即数据流在解压过程中提前结束,导致解压失败。常见原因包括压缩文件损坏、未完整下载或写入过程中被中断。 根据之前讨论的解决方法,结合用户的需求,我们给出如下解决方案: 步骤1:验证文件的完整性 步骤2:确保在写入压缩文件时正确关闭输出流 步骤3:在读取时捕获EOFException并处理 步骤4:检查网络传输(如果文件是从网络下载的) 步骤5:尝试修复损坏的压缩文件 此外,用户提到一个引用,是关于`read(char[] cbuf)`方法的描述。这个方法在读取字符输入流时使用,与我们遇到的ZLIB解压问题并不直接相关,但我们可以忽略它,因为用户明确表示该引用仅供参考,不是真正的需求。 因此,我们将按照以下结构回答: 1. 问题原因分析 2. 具体解决步骤 3. 代码示例(如果需要) 4. 预防措施 同时,我们将生成相关问题。 </think> ### 解决 `cs setup` 提示 `Caused by: java.io.EOFException: Unexpected end of ZLIB input stream` 的方法 #### 问题原因分析 该错误表示 ZLIB 压缩数据流意外终止,常见于: 1. **文件不完整**:下载中断或传输错误(如网络波动) 2. **压缩损坏**:文件生成时未正确关闭输出流 3. **存储故障**:磁盘损坏导致文件截断 4. **版本冲突**:JDK 版本与压缩工具不兼容 #### 解决方案 ##### 1. 验证压缩文件完整性 ```bash # Linux/Mac gzip -t your_file.gz # 测试完整性 sha256sum your_file.gz # 获取校验码 # Windows certUtil -hashfile your_file.gz SHA256 ``` 对比原始文件的校验码,如不匹配需重新下载[^1]。 ##### 2. 修复 Java 流处理代码 ```java try (FileInputStream fis = new FileInputStream("data.gz"); GZIPInputStream gzis = new GZIPInputStream(fis)) { // 必须完整读取所有数据 byte[] buffer = new byte[8192]; while (gzis.read(buffer) != -1) { // 处理数据 } } catch (EOFException e) { // 触发重试或重新下载逻辑 recoverFromError(); } ``` 关键点: - 使用 **try-with-resources** 确保流关闭 - 必须**完整读取**整个压缩流 - 添加 EOFException 重试机制 ##### 3. 增强下载稳定性 ```java // 伪代码示例:带重试机制的下载器 int maxRetries = 3; for (int i = 0; i < maxRetries; i++) { try { downloadFileWithChecksum(url, targetPath); break; // 成功则跳出 } catch (EOFException e) { if (i == maxRetries - 1) throw e; Thread.sleep(5000); // 延迟重试 } } ``` ##### 4. 手动修复压缩文件 ```bash # 尝试解压并重新压缩 gzip -d -c broken.gz > tmp_file # 强制解压 gzip -9 tmp_file # 重新压缩 ``` #### 预防措施 1. 文件传输后添加校验步骤(如 SHA-256) 2. 写入压缩文件后显式调用 `flush()` 和 `close()` 3. 对大文件使用分块压缩: ```java try (GZIPOutputStream gzos = new GZIPOutputStream(new FileOutputStream("data.gz"))) { gzos.write(chunk1); // 分块写入 gzos.flush(); // 强制刷新缓冲区 gzos.write(chunk2); } ``` 4. 避免跨 JDK 版本处理压缩文件(如 Java 8 和 17 的 ZLIB实现差异) > ⚠️ **关键排查点**:检查日志中压缩文件大小是否与源文件一致,若大小异常需重新获取文件源[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TechBro华仔

日拱一卒无有尽,功不唐捐终入海

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值