全部学科
Python全栈
python
NodeJS全栈
nodejs
📅 2026-05-18 5 分钟 ✍️ juanwangdev

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 更方便
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 数据响应Model、ModelMap、Map
下一篇 → Spring MVC @RequestMapping注解
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码