本文介绍一下在 Spring MVC 中常会使用的注解。
@Controller & @RequestMapping
@Controller
基于 REST 风格,新增注解:
@RestController=@Controller+@ResponseBody
@Controller 作用于类, Controller 负责处理从 DispatcherServlet 分发的请求。
需要注意的是 @Controller 实际是 说明性注解 ,几乎等同于 @Component ,会被 Spring 识别为 bean ,需要配合 @RequestMapping 才能成为真正处理请求的处理器。
@RequestMapping
基于 REST 风格,新增注解:
@GetMapping,PostMapping,PutMapping,DeleteMapping等。
@RequestMapping 注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上,作用于 Controller 类或方法。
| 属性 | 说明 |
|---|---|
value |
指定请求的实际地址,指定的地址可以是 URI Template 模式。 |
method |
指定请求的method类型, GET / POST / PUT / DELETE 等。 |
consumes |
指定处理请求的提交内容类型(Content-Type),例如: application/json , text/html 。 |
produces |
指定返回的内容类型,仅当 request 请求头中的( Accept )类型中包含该指定类型才返回。 |
params |
指定 request 中必须包含某些参数值是,才让该方法处理。 |
headers |
指定 request 中必须包含某些指定的 header 值,才能让该方法处理请求。 |
@RequestParam & @PathVariable
两个都是作用于 Controller 方法参数,用于参数绑定。
| 注解 | 说明 |
|---|---|
@RequestParam |
主要用于接受普通的请求参数,非必需。 |
@PathVariable |
取出 URI 模板中的变量作为参数,主要用于处理 RESTful 风格的请求。 |
@RequestParam
1 | GET /mvc/bind/boxed?id=1 |
1 | (value = "/boxed") |
@PathVariable
1 | GET /mvc/bind/boxed/1 |
1 | (value = "/boxed/{id}") |
@RequestBody & @ResponseBody
| 注解 | 说明 |
|---|---|
@RequestBody |
用于 Controller 的方法参数 ,从 Request 对象的 Body 数据区中取出数据。一般用于解析字符串类型的 Json 信息。 |
@ResponseBody |
用于 Controller 的方法 ,将返回的对象放入到 Response 对象的 Body 数据区中。使用后将不会返回页面而是数据,一般用于非 String 的对象作为 json 数据返回。 |
@ModelAttribute & @SessionAttributes
这两个注解可以实现在不同的模型(model)和控制器之间共享数据。
| 注解 | 说明 |
|---|---|
@ModelAttribute (若作用于普通方法) |
若用于普通方法,该 Controller 的所有方法在调用前,先执行此方法。 |
@ModelAttribute (若作用于 Controller 的方法参数) |
若作用于 Controller 的方法参数,进行参数绑定,类似 @RequestParam 。 |
@SessionAttributes |
用于类上,将值放到session作用域中。 |