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

Tomcat运行后无法识别非Spring Boot的Spring RESTful服务

问题:Spring REST服务无法触发Controller请求(非Spring Boot)

我正在尝试构建一个不使用Spring Boot的简单Spring RESTful服务,已经编写了配置类,但测试Controller时请求无法触发该Controller。使用Java Servlet时一切正常,推测问题可能出在配置或依赖中,目前无法自行解决,项目基于IntelliJ构建。

配置类

DispatcherServlet初始化类

public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

Spring配置类

@Configuration
@EnableWebMvc
@ComponentScan(basePackages ="ru.spring.testRest")
public class SpringConfig {
    
}

控制器

@RestController
@RequestMapping("/rest")
public class TestRest {

    @GetMapping("/here")
    public String test(){
        System.out.println("TRIGGERED");
        return "test";
    }
}

依赖(截图内容)

  • Spring Web MVC 5.3.24
  • Spring Context 5.3.24
  • Servlet API 4.0.1
  • JSTL 1.2

Tomcat配置(截图内容)

使用本地Tomcat 9.0.65作为应用服务器


排查建议

  1. 包扫描范围验证
    确认ru.spring.testRest包层级完全包含TestRest控制器,检查包名拼写(大小写、层级)是否完全匹配,避免因路径错误导致Controller未被扫描到。
  2. DispatcherServlet初始化检查
    • 在DispatcherServletInitializer的方法中添加打印语句或断点,验证Tomcat启动时是否执行了初始化逻辑,确认Spring配置类被正确加载。
    • 检查getServletMappings()设置为"/"是否与其他自定义Servlet冲突,确保DispatcherServlet能接管所有请求。
  3. 依赖Scope调整
    将Servlet API依赖的scope设置为provided,避免和Tomcat自带的Servlet API版本冲突,配置示例:
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    
  4. 请求路径正确性
    确认请求URL为http://localhost:[Tomcat端口]/[项目上下文路径]/rest/here,检查IntelliJ中Tomcat配置的Application Context是否正确(默认可能为空或为项目名)。
  5. 日志追踪
    添加SLF4J和Logback依赖,开启Spring MVC的DEBUG级别日志,查看请求处理流程:
    • 确认DispatcherServlet是否接收到请求
    • 检查是否成功匹配到TestRest的/rest/here映射
  6. Spring MVC注解驱动验证
    虽然@EnableWebMvc已经默认配置了注解驱动,但可以手动实现WebMvcConfigurer接口到SpringConfig中,确保注解能被正常解析:
    @Configuration
    @EnableWebMvc
    @ComponentScan(basePackages ="ru.spring.testRest")
    public class SpringConfig implements WebMvcConfigurer {
        // 若需要自定义配置可在此添加,默认@EnableWebMvc已覆盖基础配置
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:18:30