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

Springgboot内嵌Tomcat启动异常、接口报content-type错误求助

SpringBoot 2.0.5 内嵌Tomcat运行异常解决方案

1. 配置文件偶发读取失效、仅-D传参可正常启动问题

按以下顺序排查:

  • 核对Tomcat依赖scope:war包外置部署时,通常会将spring-boot-starter-tomcat依赖scope设为provided,避免和外置Tomcat包冲突。直接用spring-boot:run启动内嵌容器时,该scope会导致Tomcat相关类加载路径异常,连带配置文件扫描优先级错乱。临时调试内嵌启动时,注释掉该依赖的provided配置即可;如果要同时兼容两种部署方式,可通过Maven profile区分不同场景的依赖配置。
    参考配置:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <!-- 外置Tomcat部署时打开以下配置,内嵌调试时注释 -->
        <!-- <scope>provided</scope> -->
    </dependency>
    
  • 核对启动类配置:war包部署的启动类会继承SpringBootServletInitializer并重写configure方法,如果方法内未正确指定启动类源,内嵌启动时resources目录下的配置文件不会被加入classpath扫描路径。确保configure方法写法正确:
    @SpringBootApplication
    public class YourApplication extends SpringBootServletInitializer {
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(YourApplication.class);
        }
        public static void main(String[] args) {
            SpringApplication.run(YourApplication.class, args);
        }
    }
    
  • 核对Maven资源过滤规则:检查pom.xml中maven-resources-plugin的配置,如果exclude规则误排除了对应properties配置文件,spring-boot:run启动时配置文件不会被拷贝到target/classes目录,自然无法读取。执行mvn clean compile后检查target/classes目录下是否存在目标配置文件,不存在则调整资源过滤规则。
  • 启动时加--debug参数,查看日志中Config locations打印的配置扫描路径,确认配置文件所在目录是否在扫描列表中。

2. 接口调用返回invalid-content-type:text/html错误

该错误本质是请求未进入业务接口,被Tomcat默认错误页拦截,返回了HTML格式的错误响应,导致客户端按预期格式(SOAP XML/REST JSON)解析失败,按以下顺序排查:

  • 核对上下文路径:外置Tomcat部署时,应用上下文路径默认和war包名一致,内嵌Tomcat默认上下文路径为/。如果未在配置文件中指定和外置部署一致的上下文路径,请求会因路径不匹配返回404,触发HTML错误页。在配置文件中补全对应配置即可:
    server.servlet.context-path=/和之前外置部署一致的路径
    
  • 核对Servlet映射规则:外置部署时如果在web.xml中自定义了DispatcherServlet、SOAP服务Servlet(如CXF、Spring-WS的MessageDispatcherServlet)的映射路径,内嵌启动时无web.xml配置,默认映射规则可能和之前不一致,导致请求找不到对应处理逻辑。REST接口可通过spring.mvc.servlet.path配置指定DispatcherServlet映射路径,SOAP服务需显式注册对应Servlet的访问路径。
  • 直接用浏览器访问目标接口地址,查看返回的HTML错误页中的错误码:
    • 404:路径错误,重新核对上下文路径、接口映射地址
    • 405:请求方法不匹配,比如POST接口误用GET调用
    • 500:接口内部抛出异常,查看后端启动日志的异常栈定位问题
  • 核对过滤器/拦截器加载顺序:外置Tomcat启动时过滤器按web.xml配置顺序加载,内嵌启动时过滤器加载顺序变化可能导致自定义权限、跨域过滤器提前拦截请求,跳转至HTML格式的错误提示页,逐个禁用自定义过滤器即可验证拦截逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:01:03