Spring Boot 1.5.14控制器无法通过Postman访问,报404错误
Spring Boot集成Jersey客户端后控制器404问题排查与解决
问题场景
我正在创建一个集成**Jersey客户端(2.25.1,org.glassfish.jersey.core)**的Spring Boot 1.5.14.RELEASE简易应用。应用启动正常,但调用控制器方法时无响应,Postman返回404 Not Found。
控制器类代码片段
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class, DataSourceAutoConfiguration.class}) @RequestMapping("/report") public class ReportProcessController {
目标访问方法代码片段
@RequestMapping(value = "/email", method = RequestMethod.GET) @ResponseBody public String sendEmail(HttpServletResponse response) {
问题原因及解决方案
1. 控制器缺少必要注解
Spring无法识别仅带有@RequestMapping的类为控制器组件,必须添加@Controller或@RestController注解。由于方法已使用@ResponseBody,推荐直接使用@RestController(等价于@Controller + @ResponseBody):
@RestController @EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class, DataSourceAutoConfiguration.class}) @RequestMapping("/report") public class ReportProcessController {
2. 包扫描范围不匹配
Spring Boot默认仅扫描主启动类所在包及其子包下的组件。如果ReportProcessController不在该范围内,需在主启动类添加@ComponentScan指定扫描路径:
@SpringBootApplication @ComponentScan(basePackages = {"com.yourpackage.controller", "其他需要扫描的包路径"}) public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
3. Jersey与Spring MVC路由冲突
集成Jersey时,若配置了Jersey的Servlet容器,可能会覆盖Spring MVC的DispatcherServlet,导致Spring MVC控制器无法被路由:
- 若需同时使用两者:为Jersey配置独立的路径前缀,比如在Jersey配置类添加
@ApplicationPath("/jersey-api"),让Jersey处理该前缀的请求,Spring MVC处理其他路径。 - 若仅需Spring MVC:移除Jersey相关的配置类或依赖。
内容的提问来源于stack exchange,提问作者Rohit Tiwari
相关产品推荐
相关产品推荐

