You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot调试模式返回404 Not Found:mp3agic依赖引发异常

Spring Boot调试模式下引入mp3agic依赖导致404及EOFException的解决方案

我之前碰到过类似的问题,你的情况很典型——仅在IntelliJ调试模式下引入mp3agic:0.9.1后出现HTTP请求头解析失败(EOFException),最终返回404,但正常运行模式完全正常。结合你提供的日志和操作记录,问题的核心是旧版本mp3agic与Spring Boot内嵌Tomcat的NIO处理逻辑存在兼容性冲突,尤其是调试模式下类加载顺序变化放大了这个问题。

解决方案步骤

1. 优先升级mp3agic版本

0.9.1是非常老旧的版本(发布于2015年),存在不少兼容性问题。直接升级到最新稳定版(比如0.9.8)大概率能解决问题:
修改build.gradle中的依赖:

// 替换旧的compile为implementation(Gradle 4+推荐)
implementation "com.mpatric:mp3agic:0.9.8"

升级后清理重建项目,再尝试调试模式运行。

2. 排查并排除依赖冲突

如果升级版本暂时不可行,先检查mp3agic引入的依赖是否与Spring Boot内嵌Tomcat冲突:

  • 执行Gradle命令查看依赖树:
    ./gradlew dependencies
    
  • 重点关注是否有与tomcat-embed-core、netty等IO相关库的版本冲突。如果发现冲突,在依赖中排除冲突模块:
    implementation("com.mpatric:mp3agic:0.9.1") {
        // 示例:如果发现commons-io版本冲突
        exclude group: 'commons-io', module: 'commons-io'
    }
    

3. 调整Tomcat的IO模式

调试模式下Tomcat的NIO处理可能被mp3agic干扰,强制切换为BIO模式可以绕过这个问题:
在application.properties中添加配置:

# 强制使用BIO协议
server.tomcat.protocol=org.apache.coyote.http11.Http11Protocol
server.tomcat.connection-timeout=20000

4. 检查IntelliJ调试配置

有些IntelliJ的调试增强选项会触发类加载异常:

  • 打开Run/Debug Configurations → 你的Spring Boot配置
  • 取消勾选Enable bytecode enhancement(如果开启的话)
  • 同时尝试关闭Allow parallel run等可能影响类加载的选项,重启IDE后再调试。

问题原因分析

从你的日志可以看到,请求确实到达了服务器,但Tomcat在解析HTTP请求头时抛出EOFException,说明输入流被提前关闭或截断。旧版本mp3agic可能包含了修改IO流处理的代码,在调试模式下,类加载顺序变化导致Tomcat的NIO缓冲区处理逻辑被干扰,最终无法正常解析请求。

你提供的错误日志

2019-04-19 23:25:58.267 DEBUG 8212 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor : Error parsing HTTP request header
java.io.EOFException: null
	at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1208) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1142) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:729) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:352) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294) ~[tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) [na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) [na:na]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.13.jar:9.0.13]
	at java.base/java.lang.Thread.run(Thread.java:844) [na:na]
2019-04-19 23:25:58.267 DEBUG 8212 --- [nio-8080-exec-2] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@1f2672ea:org.apache.tomcat.util.net.NioChannel@19ebacea:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8080 remote=/0:0:0:0:0:0:0:1:57538]], Status in: [OPEN_READ], State out: [CLOSED]
2019-04-19 23:25:58.269 DEBUG 8212 --- [nio-8080-exec-2] o.apache.tomcat.util.threads.LimitLatch : Counting down[http-nio-8080-exec-2] latch=2
2019-04-19 23:25:58.269 DEBUG 8212 --- [nio-8080-exec-2] org.apache.tomcat.util.net.NioEndpoint : Socket: [org.apache.tomcat.util.net.NioChannel@19ebacea:java.nio.channels.SocketChannel[closed]] closed
2019-04-19 23:25:58.279 DEBUG 8212 --- [nio-8080-exec-1] org.apache.tomcat.util.http.Parameters : Set query string encoding to UTF-8
2019-04-19 23:25:58.283 DEBUG 8212 --- [nio-8080-exec-1] o.a.c.authenticator.AuthenticatorBase : Security checking request POST /v1/agents
2019-04-19 23:25:58.283 DEBUG 8212 --- [nio-8080-exec-1] org.apache.catalina.realm.RealmBase : No applicable constraints defined
2019-04-19 23:25:58.287 DEBUG 8212 --- [nio-8080-exec-1] o.a.c.a.jaspic.AuthConfigFactoryImpl : Loading persistent provider registrations from [C:\Users\Vino\AppData\Local\Temp\tomcat.11733970093983411817.8080\conf\jaspic-providers.xml]
2019-04-19 23:25:58.287 DEBUG 8212 --- [nio-8080-exec-1] o.a.c.authenticator.AuthenticatorBase : Not subject to any constraint
2019-04-19 23:25:58.303 DEBUG 8212 --- [nio-8080-exec-1] o.a.tomcat.util.net.SocketWrapperBase : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@2d6dfe49:org.apache.tomcat.util.net.NioChannel@1cc15a:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8080 remote=/0:0:0:0:0:0:0:1:57539]], Read from buffer: [0]
2019-04-19 23:25:58.303 DEBUG 8212 --- [nio-8080-exec-1] org.apache.tomcat.util.net.NioEndpoint : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@2d6dfe49:org.apache.tomcat.util.net.NioChannel@1cc15a:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8080 remote=/0:0:0:0:0:0:0:1:57539]], Read direct from socket: [0]
2019-04-19 23:25:58.303 DEBUG 8212 --- [nio-8080-exec-1] o.apache.coyote.http11.Http11Processor : Socket: [org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper@2d6dfe49:org.apache.tomcat.util.net.NioChannel@1cc15a:java.nio.channels.SocketChannel[connected local=/0:0:0:0:0:0:0:1:8080 remote=/0:0:0:0:0:0:0:1:57539]], Status in: [OPEN_READ], State out: [OPEN]
2019-04-19 23:26:10.967 DEBUG 8212 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Pool stats (total=10, active=0, idle=10, waiting=0)
2019-04-19 23:26:40.542 DEBUG 8212 --- [Engine[Tomcat]]] org.apache.catalina.session.ManagerBase : Start expire sessions StandardManager at 1555680400542 sessioncount 0
2019-04-19 23:26:40.542 DEBUG 8212 --- [Engine[Tomcat]]] org.apache.catalina.session.ManagerBase : End expire sessions StandardManager processingTime 0 expired sessions: 0
2019-04-19 23:26:40.969 DEBUG 8212 --- [l-1 housekeeper] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Pool stats (total=10, active=0, idle=10, waiting=0)
2019-04-19 23:26:44.541 DEBUG 8212 --- [nnection-reaper] h.i.c.PoolingHttpClientConnectionManager : Closing connections idle longer than 60000 MILLISECONDS
2019-04-19 23:26:44.541 DEBUG 8212 --- [nnection-reaper] h.i.c.PoolingHttpClientConnectionManager : Closing connections idle longer than 60000 MILLISECONDS
2019-04-19 23:26:44.541 DEBUG 8212 --- [nnection-reaper] h.i.c.PoolingHttpClientConnectionManager : Closing connections idle longer than 60000 MILLISECONDS
2019-04-19 23:26:44.541 DEBUG 8212 --- [nnection-reaper] h.i.c.PoolingHttpClientConnectionManager : Closing connections idle longer than 60000 MILLISECONDS

内容的提问来源于stack exchange,提问作者Vino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:08:36