Spring MVC @Controller注解
@Controller 用于声明一个类为 Spring MVC 控制器,会被组件扫描自动注册为 Bean。
基本用法
Java
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
@GetMapping("/about")
public String about() {
return "about";
}
}
注解组合
| 注解 | 组合关系 |
|---|---|
| @Controller | @Component + 语义标识 |
| @RestController | @Controller + @ResponseBody |
类级别 @RequestMapping
Java
@Controller
@RequestMapping("/user")
public class UserController {
@GetMapping("/list")
public String list() {
return "user/list";
}
@GetMapping("/{id}")
public String detail(@PathVariable Long id) {
return "user/detail";
}
}
组件扫描配置
Java
@Configuration
@ComponentScan("com.example.controller")
public class WebConfig implements WebMvcConfigurer {
// ...
}
与 @RestController 对比
Java
// @Controller - 返回视图
@Controller
public class PageController {
@GetMapping("/page")
public String page() {
return "page"; // 返回视图名
}
}
// @RestController - 返回数据
@RestController
public class ApiController {
@GetMapping("/api/data")
public Data data() {
return new Data(); // 返回 JSON
}
}
注解属性
@Controller 本身无特殊属性,继承自 @Component:
| 元注解 | 说明 |
|---|---|
| @Component | 标记为 Spring 组件 |
| value | 指定 Bean 名称(可选) |
Java
@Controller("userCtrl")
public class UserController {
// Bean 名称为 userCtrl
}
@Controller 默认是单例,多线程环境下不要使用成员变量存储请求状态。
要点总结
- @Controller 声明控制器类,会被组件扫描识别
- 配合 @RequestMapping 实现请求映射
- 返回 String 表示视图名
- REST API 使用 @RestController 更方便
📝 发现内容有误?点击此处直接编辑