Spring Boot MVC控制器选择:普通MVC控制器应使用哪种注解?
Spring Boot MVC控制器选择与注解使用指南
核心结论
在你的Spring Boot 3.4.2(搭配Spring Framework 6.2.2)项目中:
- Spring Boot MVC优先选用
org.springframework.stereotype.Controller注解,这是现代Spring MVC的标准实现方式,完全适配Spring Boot的自动配置机制。 - 普通MVC控制器同样使用
@Controller注解;若控制器主要返回JSON/XML等响应体而非视图模板,可直接使用@RestController(该注解是@Controller+@ResponseBody的组合,简化开发)。
两种Controller的区别
1. org.springframework.web.servlet.mvc.Controller(接口)
这是Spring MVC早期的编程式控制器实现方式,需要手动实现接口并重写handleRequest方法,手动处理请求、构建响应:
public class OldStyleController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView mav = new ModelAndView("viewName"); mav.addObject("data", "example"); return mav; } }
这种方式繁琐、灵活性低,已被Spring官方逐步淘汰,仅用于兼容老旧项目,不推荐在Spring Boot中使用。
2. org.springframework.stereotype.Controller(注解)
这是Spring stereotype注解体系的一部分,通过标记类为Spring管理的控制器组件,结合@RequestMapping(或@GetMapping/@PostMapping等细分注解)定义请求映射,开发简洁高效:
@Controller public class AnnotationStyleController { @GetMapping("/hello") public String hello(Model model) { model.addAttribute("message", "Hello Spring Boot MVC!"); return "hello-view"; // 返回视图名称 } }
如果是REST风格接口,使用@RestController更便捷:
@RestController public class RestStyleController { @GetMapping("/api/data") public Map<String, String> getData() { return Map.of("key", "value"); // 直接返回JSON响应 } }
Spring Boot的自动配置会自动扫描并注册带有@Controller/@RestController注解的类,无需额外配置,完全契合Spring Boot的"约定大于配置"理念。
适配你的依赖配置
你的项目依赖Spring Boot 3.4.2和Spring Framework 6.2.2,这两个版本完全支持注解式控制器的所有特性,包括最新的请求映射注解、响应处理增强等,使用@Controller/@RestController是最优选择。
内容的提问来源于stack exchange,提问作者Stewart
相关产品推荐
相关产品推荐

