首页/ 学科题库/ SpringMVC/ Spring MVC @Controller注解
SpringMVC 实战教程

Spring MVC @Controller注解

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 更方便
想在手机上练这篇的配套题目?
使用微信 卷王开发者小程序/App,首页顶部扫一扫识别下方二维码,即可解锁本讲对应真题与错题本。
了解产品 App
← 上一篇 数据响应Model、ModelMap、Map 下一篇 → Spring MVC @RequestMapping注解