@RestController和@RequestMapping

@RestController

@RestController 是加在类上的注解,它的核心作用是告诉 Spring:这个类是一个控制器,并且这个类里所有方法的返回值都直接写入 HTTP 响应体(Response Body),而不是跳转到视图页面(如 JSP)

  • 它是一个组合注解,等于 @Controller + @ResponseBody
  • 如果你在类上只写 @Controller,方法上必须加 @ResponseBody 才能返回 JSON/XML;而写上 @RestController,则省去了每个方法上的 @ResponseBody

@RequestMapping

@RequestMapping 是加在类或方法上的注解,它的核心作用是将特定的 HTTP 请求(URL、方法类型等)绑定到对应的类或处理方法上,也就是路由映射。

  • 它负责定义“访问路径”(比如 /api/users)和“请求方式”(GET/POST/PUT/DELETE)。
  • 它有多个衍生变体(其实就是简写):@GetMapping@PostMapping@PutMapping@DeleteMapping

区别和联系

维度 @RestController @RequestMapping
标注位置 只能标注在类上 既可标注在类上,也可标注在方法上
核心职责 声明该类是 RESTful 风格的控制器,且返回数据(JSON/XML)而非视图 声明 URL 路径映射(即:什么地址访问这个方法)
是否必须 非必须(可以用 @Controller + @ResponseBody 替代) 必须(否则方法无法被 HTTP 请求访问到)
作用范围 作用于整个类的所有方法(统一套用 @ResponseBody 行为) 类上定义父路径(前缀),方法上定义子路径(具体端点)

@RequestMapping 的变体

现在企业开发中,为了更精确地限制 HTTP 方法,通常不再直接使用 @RequestMapping 在方法上,而是用它的变体:

  • @GetMapping = @RequestMapping(method = RequestMethod.GET)
  • @PostMapping = @RequestMapping(method = RequestMethod.POST)

这些变体本质上还是 @RequestMapping,只是写法更简洁。

@RequestParam

情况 建议
必填参数 必须加 @RequestParam(默认 required=true
可选参数 @RequestParam(required=false),并在代码中判空
需默认值 @RequestParam(defaultValue = "xxx")
简单场景且参数名不变 不加也能工作,但为规范起见建议加上