浅谈SpringMVC之注解

本文介绍一下在 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
2
3
4
5
@GetMapping(value = "/boxed")
public String boxedBind(@RequestParam("id") Integer id){

return "id: " + id;
}

@PathVariable

1
GET /mvc/bind/boxed/1
1
2
3
4
5
@GetMapping(value = "/boxed/{id}")
public String restBind(@PathVariable("id") Integer id){

return "id: " + 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作用域中。