Spring MVC 注解说明
# Spring MVC 注解说明
Spring MVC 中的注解一般分为三类:
- 控制器相关的注解
- 数据绑定相关的注解
- 视图相关的注解
下面分别介绍每个注解的详细说明:
# 控制器相关的注解
@Controller
用于标识一个类为 Spring MVC 的控制器类。
@RequestMapping ☆☆☆☆☆
用于标识一个方法或类的 URL 请求映射,可以用于类和方法级别上。比如:
@Controller @RequestMapping("/user") public class UserController { @RequestMapping("/list") public String userList(Model model){ return "user/list"; } }
1
2
3
4
5
6
7
8上面的代码中,@RequestMapping ("/user") 标记了 UserController 类所处理的请求的父级 URL,@RequestMapping ("/list") 标记了 userList () 方法所处理的请求的具体 URL,当请求 /user/list 时,UserController 的 userList () 方法将被调用。
属性说明
@RequestMapping
注解有很多属性,用于设置如何映射请求 URL 和请求方法,以下是一些常用的属性:value 或 path: 请求映射的路径,可以用一个字符串或一个字符串数组来表示,比如
@RequestMapping("/users")
或者@RequestMapping({"/users", "/customers"})
。method: HTTP 方法的类型,可设置一个或多个,比如
@RequestMapping(value = "/users", method = RequestMethod.GET)
。params: 请求参数的限制,通过表达式来实现,可以限定请求的参数名、值以及消费类型和生产类型。比如
@RequestMapping(value = "/users", method = RequestMethod.GET, params = "id=1")
就表示请求参数中必须包含 "id=1" 这种形式的参数限制,否则将拒绝请求。headers: 请求头的限制,可以通过表达式来实现,比如
@RequestMapping(value = "/users", method = RequestMethod.GET, headers = "Accept=text/html")
表示只接受响应类型为 "text/html" 的请求。consumes: 请求数据类型限制,表示该请求映射方法能够接受的媒体类型。比如
@RequestMapping(value = "/users", method = RequestMethod.POST, consumes = "application/json")
表示该方法只接受请求数据类型为 "application/json" 的 POST 请求。produces: 返回值类型限制,表示该请求映射方法能够生产的媒体类型。比如
@RequestMapping(value = "/users/{id}", method = RequestMethod.GET, produces = "application/json")
表示该方法只能返回 "application/json" 类型的响应。params 和 headers 中的表达式:使用 SpEL(Spring Expression Language)来实现的。比如
@RequestMapping(value = "/users", method = RequestMethod.GET, params = "id={^[0-9]*$}")
表示只接受参数 "id" 值为数字的请求。
需要注意的是,以上属性可以组合使用来实现更复杂的请求映射。另外,在处理器方法中使用
@RequestMapping
注解时,可以将该注解放在类级别上,表示对类中的所有请求方法都有效,在方法级别上设置的注解会覆盖类级别上的注解。如果不指定请求方法类型,则默认支持所有的 HTTP 请求方法。@GetMapping 和 @PostMapping
@GetMapping 和 @PostMapping 分别用于标记一个方法为 GET 请求和 POST 请求方法,它们是 @RequestMapping 的简化版,其余属性与 @RequestMapping 一致。比如:
@Controller @RequestMapping("/user") public class UserController { @GetMapping("/list") public String userList(Model model){ return "user/list"; } @PostMapping("/save") public String saveUser(Model model){ // 保存用户 return "redirect:/user/list"; } }
1
2
3
4
5
6
7
8
9
10
11
12
13@PathVariable
用于在 URL 中获取路径变量的值。比如:
@Controller @RequestMapping("/user") public class UserController { @RequestMapping("/{id}") public String viewUser(@PathVariable("id") Long id, Model model){ User user = userService.findById(id); model.addAttribute("user", user); return "user/view"; } }
1
2
3
4
5
6
7
8
9
10@RequestParam
用于从查询字符串中获取参数值。比如:
@Controller @RequestMapping("/user") public class UserController { @GetMapping("/list") public String userList(@RequestParam("page") int page, @RequestParam("size") int size, Model model){ int count = userService.count(); List<User> users = userService.find(page, size); model.addAttribute("users", users); model.addAttribute("count", count); return "user/list"; } }
1
2
3
4
5
6
7
8
9
10
11
12
# 数据绑定相关的注解
@ModelAttribute
用于将请求参数绑定到模型数据中。比如:Get 接收的参数正好是对象中的一些属性,就可以用这个注解
@Controller @RequestMapping("/user") public class UserController { @PostMapping("/add") public String addUser(@ModelAttribute User user){ userService.save(user); return "redirect:/user/list"; } }
1
2
3
4
5
6
7
8
9@RequestBody
用于将请求正文绑定到方法参数上。比如:
@Controller @RequestMapping("/user") public class UserController { @PostMapping("/add") public String addUser(@RequestBody User user){ userService.save(user); return "redirect:/user/list"; } }
1
2
3
4
5
6
7
8
9
# 视图相关的注解
@ResponseBody
用于将方法返回的对象转换为指定格式的响应数据。比如:
@Controller @RequestMapping("/user") public class UserController { @GetMapping("/{id}") @ResponseBody public User getUser(@PathVariable("id") Long id){ return userService.findById(id); } }
1
2
3
4
5
6
7
8
9当请求 /user/1 时,将返回一个 JSON 格式的 User 对象。
@ResponseStatus
用于指定响应状态码。比如:
@Controller @RequestMapping("/user") public class UserController { @DeleteMapping("/{id}") @ResponseStatus(HttpStatus.NO_CONTENT) public void deleteUser(@PathVariable("id") Long id){ userService.deleteById(id); } }
1
2
3
4
5
6
7
8
9当请求 /user/1 并使用 DELETE 方法时,将返回状态码为 204 No Content,表示删除成功。
以上是一些常用的 Spring MVC 注解,还有一些其他的注解以及注解的属性可以根据具体的业务需求进行使用和配置。
# 其他注解
# @RequestHeader
作用:用于获取请求消息头。
属性:
- value:提供消息头名称
- required:是否必须有此消息头
/**
* RequestHeader 注解
* @param user
* @return
*/
@RequestMapping("/useRequestHeader")
public String useRequestHeader(@RequestHeader(value="Accept-Language", required=false)String requestHeader){
System.out.println(requestHeader);
return "success";
}
2
3
4
5
6
7
8
9
10
11
# @CookieValue
作用:用于把指定 cookie 名称的值传入控制器方法参数。
属性:
- value:指定 cookie 的名称。
- required:是否必须有此 cookie。
/**
* Cookie 注解注解
* @param user
* @return
*/
@RequestMapping("/useCookieValue")
public String useCookieValue(@CookieValue(value="JSESSIONID",required=false)String cookieValue){
System.out.println(cookieValue);
return "success";
}
2
3
4
5
6
7
8
9
10
11