SpringMVC框架中的常用注解 Spring MVC是一个基于注解的Web框架,它提供了大量的注解来简化Web应用程序的开发和配置。
目前(截至2021年9月),Spring MVC中有近70个注解。这些注解包括了@Controller、@RequestMapping、@PathVariable、@RequestParam、@ResponseBody、@RequestBody、@ModelAttribute、@Valid等常用的注解,也包括一些不常用的注解。每个注解的作用和使用示例在实际开发中会根据具体情况而有所不同。
Spring MVC常见的注解、解释、用例
(1)@Controller 作用:标识一个类为SpringMVC的控制器,@Controller是一个用于标识控制器的注解。使用@Controller注解的类通常处理HTTP请求,并返回响应结果。
用例:
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping(method = RequestMethod.GET)
public String hello() {
return "hello";
}
}
(2)@RestController 作用:标识一个类为SpringMVC的Rest风格的控制器,@RestController是一个用于标识Rest风格控制器的注解。与@Controller注解不同,@RestController注解的类中的所有方法都将以JSON或XML形式返回响应结果
用例:
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/hello")
public String hello() {
return "Hello, World!";
}
}
(3)@RequestMapping 作用:用于映射请求到控制器方法,@RequestMapping是一个用于映射请求到控制器方法的注解,在SpringMVC中非常常用。它可以用于类级别和方法级别。在类级别,@RequestMapping注解用于指定控制器处理的请求路径前缀,这个前缀会被应用到类中所有处理请求的方法上。
用例:
@Controller
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public String getUser(@PathVariable Long id) {
// ...
}
@PostMapping
public String createUser(@ModelAttribute User user) {
// ...
}
}
(4)@GetMapping 作用:用于映射GET请求到控制器方法,@GetMapping是一个用于映射HTTP GET请求到控制器方法的注解,在SpringMVC中非常常用。它可以用于方法级别,用于指定处理GET请求的方法。例如:
用例:
@Controller
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public String getUser(@PathVariable Long id) {
// ...
}
}
(5)@PostMapping 作用:用于映射POST请求到控制器方法,@PostMapping是一个用于映射HTTP POST请求到控制器方法的注解,在SpringMVC中非常常用。它可以用于方法级别,用于指定处理POST请求的方法
用例:
@Controller
@RequestMapping("/users")
public class UserController {
@PostMapping
public String createUser(@ModelAttribute User user) {
// ...
}
}
(6)@PutMapping 作用:用于映射PUT请求到控制器方法,@PutMapping是一个用于映射HTTP PUT请求到控制器方法的注解,在SpringMVC中非常常用。它可以用于方法级别,用于指定处理PUT请求的方法。
用例:
@Controller
@RequestMapping("/users")
public class UserController {
@PutMapping("/{id}")
public String updateUser(@PathVariable Long id, @ModelAttribute User user) {
// ...
}
}
(7)@DeleteMapping 作用:用于映射DELETE请求到控制器方法,@DeleteMapping是一个用于映射HTTP DELETE请求到控制器方法的注解,在SpringMVC中非常常用。它可以用于方法级别,用于指定处理DELETE请求的方法
用例:
@Controller
@RequestMapping("/users")
public class UserController {
@PatchMapping("/{id}")
public String updateUser(@PathVariable Long id, @RequestBody User user) {
// ...
}
}
(8)@PatchMapping 作用:用于映射PATCH请求到控制器方法。@PatchMapping是一个用于映射HTTP PATCH请求到控制器方法的注解,在SpringMVC中也可以使用。它可以用于方法级别,用于指定处理PATCH请求的方法
用例:
@Controller
@RequestMapping("/users")
public class UserController {
@PatchMapping("/{id}")
public String updateUser(@PathVariable Long id, @RequestBody User user) {
// ...
}
}
(9)@RequestParam 作用:将请求参数绑定到控制器方法的参数上。@RequestParam是一个用于获取HTTP请求参数的注解,在SpringMVC中非常常用。它可以用于方法参数级别,用于指定获取请求参数的方式和名称。
用例:
@Controller
@RequestMapping("/users")
public class UserController {
@GetMapping
public String getUsers(@RequestParam("page") int page, @RequestParam("size") int size) {
// ...
}
}
(10)@PathVariable 作用:将URL中的一部分作为控制器方法的参数。@PathVariable是一个用于获取HTTP请求路径中的参数的注解,在SpringMVC中非常常用。它可以用于方法参数级别,用于指定获取请求路径参数的名称。
用例:
@Controller
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
public String getUser(@PathVariable Long id) {
// ...
}
}
(11)@RequestBody 作用:将请求体的内容绑定到控制器方法的参数上。@RequestBody是一个用于获取HTTP请求体中的参数的注解,在SpringMVC中非常常用。它可以用于方法参数级别,用于指定获取请求体参数的方式。
用例:
@Controller
@RequestMapping("/users")
public class UserController {
@PostMapping
public String createUser(@RequestBody User user) {
// ...
}
}
(12)@ResponseBody 作用:将控制器方法的返回值直接写入HTTP响应体中。@ResponseBody是一个用于将方法的返回值转换成HTTP响应体的注解,在SpringMVC中非常常用。它可以用于方法级别,用于指定将方法的返回值转换成HTTP响应体,并发送给客户端。
用例:
@Controller
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
@ResponseBody
public User getUser(@PathVariable Long id) {
// ...
return user;
}
}
(13)@ModelAttribute 作用:将请求参数绑定到一个对象上。@ModelAttribute是一个用于将HTTP请求参数绑定到方法参数或方法返回值上的注解,在SpringMVC中非常常用。它可以用于方法参数级别,用于指定使用HTTP请求参数来绑定方法参数上的属性值。
用例:
@Controller
@RequestMapping("/users")
public class UserController {
@PostMapping
public String createUser(@ModelAttribute User user) {
// ...
}
}
(14)@SessionAttribute 作用:将一个对象存储到session中。@SessionAttribute是一个用于将模型属性存储到HTTP Session中的注解,在SpringMVC中非常常用。它可以用于方法级别或类级别,用于指定将模型属性存储到HTTP Session中。
用例:
@Controller
@RequestMapping("/users")
@SessionAttributes("user")
public class UserController {
@GetMapping("/{id}")
public String getUser(@PathVariable Long id, Model model) {
User user = userService.getUserById(id);
model.addAttribute("user", user);
return "user-details";
}
@PostMapping("/{id}")
public String updateUser(@PathVariable Long id, @ModelAttribute("user") User user) {
userService.updateUser(user);
return "redirect:/users/" + id;
}
}
(15)@InitBinder 作用:用于处理WebDataBinder的注解。@InitBinder是一个用于定制WebDataBinder的注解,在SpringMVC中非常常用。它可以用于类级别或方法级别,用于指定定制WebDataBinder的方式。
用例:
@Controller
@RequestMapping("/users")
public class UserController {
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
@PostMapping
public String createUser(@ModelAttribute User user) {
// ...
}
}
(16)@ExceptionHandler 作用:用于处理异常的注解。@ExceptionHandler是一个用于处理控制器中出现的异常的注解,在SpringMVC中非常常用。它可以用于方法级别,用于指定处理控制器中出现的异常的方式。
用例:
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView handleException(Exception ex) {
ModelAndView mav = new ModelAndView();
mav.addObject("exception", ex);
mav.setViewName("error");
return mav;
}
}
(17)@ResponseStatus 作用:将异常转换为HTTP响应状态码。@ResponseStatus是一个用于指定控制器方法处理成功时的HTTP响应状态码的注解,在SpringMVC中非常常用。它可以用于方法级别,用于指定控制器方法处理成功时的HTTP响应状态码。
用例:
@Controller
@RequestMapping("/users")
public class UserController {
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void createUser(@RequestBody User user) {
userService.createUser(user);
}
}
(18)@ControllerAdvice 作用:用于定义全局控制器异常处理器。@ControllerAdvice是一个用于定义全局控制器通知的注解,在SpringMVC中非常常用。它可以用于类级别,用于定义全局控制器通知。
用例:
@ControllerAdvice
public class GlobalControllerAdvice {
@ModelAttribute("currentUser")
public User getCurrentUser() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null) {
return null;
}
return (User) authentication.getPrincipal();
}
@ExceptionHandler(Exception.class)
public ModelAndView handleException(Exception ex) {
ModelAndView mav = new ModelAndView();
mav.addObject("exception", ex);
mav.setViewName("error");
return mav;
}
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
}
在这个例子中,@ControllerAdvice注解用于定义全局控制器通知,包括@ModelAttribute、@ExceptionHandler和@InitBinder三个方法。当控制器中的方法被调用时,将会自动调用这些方法,以实现全局控制器通知的功能。@ModelAttribute用于将当前登录的用户信息添加到模型中,@ExceptionHandler用于处理控制器方法中出现的异常,@InitBinder用于定制WebDataBinder的方式。
总之,@ControllerAdvice注解是一个用于定义全局控制器通知的注解,在SpringMVC中非常常用。它能够帮助我们实现全局控制器通知的功能,提高代码的可读性和可维护性。
在这个例子中,@ControllerAdvice注解用于定义全局控制器通知,包括@ModelAttribute、@ExceptionHandler和@InitBinder三个方法。当控制器中的方法被调用时,将会自动调用这些方法,以实现全局控制器通知的功能。@ModelAttribute用于将当前登录的用户信息添加到模型中,@ExceptionHandler用于处理控制器方法中出现的异常,@InitBinder用于定制WebDataBinder的方式。
总之,@ControllerAdvice注解是一个用于定义全局控制器通知的注解,在SpringMVC中非常常用。它能够帮助我们实现全局控制器通知的功能,提高代码的可读性和可维护性。
(19)@RequestMappingHandlerMapping 作用:将@RequestMapping注解解析为一个请求映射。@RequestMappingHandlerMapping是Spring MVC中的一个HandlerMapping实现类,用于将请求映射到控制器方法。它是一个用于处理@RequestMapping注解的HandlerMapping实现类之一,在Spring MVC中非常常用。
用例:
@Controller
@RequestMapping("/users")
public class UserController {
@GetMapping("/{id}")
@ResponseBody
public User getUser(@PathVariable Long id) {
return userService.getUserById(id);
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public void createUser(@RequestBody User user) {
userService.createUser(user);
}
}
在这个例子中,UserController类上使用了@RequestMapping注解,表示该控制器处理"/users"路径下的请求。getUser()方法上使用了@GetMapping注解,表示该方法处理HTTP GET请求。@GetMapping注解中的"{id}"表示该方法接受一个名为"id"的路径参数。@ResponseBody注解表示该方法返回的结果将会被序列化为HTTP响应的正文。createUser()方法上使用了@PostMapping注解,表示该方法处理HTTP POST请求。@ResponseStatus注解表示该方法处理成功时返回HTTP状态码为201(Created)。
在DispatcherServlet初始化时,会注册RequestMappingHandlerMapping,并将其与所有使用了@Controller注解的类关联起来。当请求到达DispatcherServlet时,RequestMappingHandlerMapping会遍历所有已注册的控制器类和方法,找到与请求匹配的控制器方法,并返回对应的HandlerExecutionChain对象,该对象包含了控制器方法和一系列拦截器。
总之,RequestMappingHandlerMapping是Spring MVC中的一个HandlerMapping实现类,用于将请求映射到控制器方法。它能够帮助我们实现请求映射和控制器方法的调度,提高代码的可读性和可维护性。
在这个例子中,UserController类上使用了@RequestMapping注解,表示该控制器处理"/users"路径下的请求。getUser()方法上使用了@GetMapping注解,表示该方法处理HTTP GET请求。@GetMapping注解中的"{id}"表示该方法接受一个名为"id"的路径参数。@ResponseBody注解表示该方法返回的结果将会被序列化为HTTP响应的正文。createUser()方法上使用了@PostMapping注解,表示该方法处理HTTP POST请求。@ResponseStatus注解表示该方法处理成功时返回HTTP状态码为201(Created)。
在DispatcherServlet初始化时,会注册RequestMappingHandlerMapping,并将其与所有使用了@Controller注解的类关联起来。当请求到达DispatcherServlet时,RequestMappingHandlerMapping会遍历所有已注册的控制器类和方法,找到与请求匹配的控制器方法,并返回对应的HandlerExecutionChain对象,该对象包含了控制器方法和一系列拦截器。
总之,RequestMappingHandlerMapping是Spring MVC中的一个HandlerMapping实现类,用于将请求映射到控制器方法。它能够帮助我们实现请求映射和控制器方法的调度,提高代码的可读性和可维护性。
(20)@RequestMappingHandlerAdapter 作用:将@RequestMapping注解解析为一个请求适配器
用例:
@RequestMappingHandlerAdapter是Spring MVC中的一个HandlerAdapter实现类,用于将请求处理结果转换为HTTP响应。它是一个用于处理@RequestMapping注解的HandlerAdapter实现类之一,在Spring MVC中非常常用。
RequestMappingHandlerAdapter根据请求URL和请求方法(GET、POST等)将请求映射到对应的控制器方法,并调用该方法获取处理结果。然后,它会根据处理结果的类型选择对应的MessageConverter将其转换为HTTP响应的正文,并设置HTTP响应头部信息。最后,它会返回一个ModelAndView对象或void类型的结果,或直接将响应信息写入HTTP响应流中。
RequestMappingHandlerAdapter还支持使用HandlerMethodArgumentResolver解析控制器方法的参数,以及使用HandlerMethodReturnValueHandler处理控制器方法的返回值。它可以通过配置MessageConverter和ReturnValueHandler来实现。
总之,RequestMappingHandlerAdapter是Spring MVC中的一个HandlerAdapter实现类,用于将请求处理结果转换为HTTP响应。它是Spring MVC中非常重要的组件之一,能够帮助我们实现请求处理和HTTP响应的转换,提高代码的可读性和可维护性。
(21)@RequestHeader 作用:将请求头的值绑定到控制器方法的参数上。@RequestHeader是Spring MVC中的一个注解,用于获取HTTP请求头部信息。它可以用于方法参数上,表示将指定的HTTP请求头部信息绑定到该参数上。
用例:
@GetMapping("/users")
@ResponseBody
public List<User> getUsers(@RequestHeader("Authorization") String authorization) {
// 处理HTTP请求头部中的Authorization信息
// ...
}
(22)@CookieValue 作用:将请求Cookie的值绑定到控制器方法的参数上。@CookieValue是Spring MVC中的一个注解,用于获取HTTP请求中的Cookie值。它可以用于方法参数上,表示将指定的Cookie值绑定到该参数上。
用例:
@GetMapping("/users")
@ResponseBody
public List<User> getUsers(@CookieValue("sessionId") String sessionId) {
// 处理HTTP请求中的sessionId Cookie值
// ...
}
(23)@RequestAttribute 作用:将请求属性的值绑定到控制器方法的参数上。@RequestAttribute是Spring MVC中的一个注解,用于获取HTTP请求中的属性(即ServletRequest.setAttribute()方法设置的属性)。它可以用于方法参数上,表示将指定的HTTP请求属性绑定到该参数上。
用例:
@GetMapping("/users")
@ResponseBody
public List<User> getUsers(@RequestAttribute("userId") Long userId) {
// 处理HTTP请求中的userId属性
// ...
}
(24)@ResponseStatus 作用:将方法的返回值转换为HTTP响应状态码。@ResponseStatus是Spring MVC中的一个注解,用于指定控制器方法的响应状态码和响应消息。它可以用于控制器方法上,表示将指定的响应状态码和响应消息绑定到该方法上。
用例:
@PostMapping("/users")
@ResponseStatus(HttpStatus.CREATED)
public void createUser(@RequestBody User user) {
// 创建用户
// ...
}
(25)@ResponseBodyAdvice 作用:用于自定义@ResponseBody的处理。@ResponseBodyAdvice是Spring MVC中的一个接口,用于对控制器方法返回的响应数据进行统一的处理。它可以通过实现该接口来实现对响应数据的统一处理。
用例:
@ControllerAdvice
public class MyResponseBodyAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
// 判断是否需要对该返回类型进行处理
// ...
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request,
ServerHttpResponse response) {
// 对响应数据进行统一处理
// ...
return processedBody;
}
}
(26)@RequestBodyAdvice 作用:用于自定义@RequestBody的处理。@RequestBodyAdvice是Spring MVC中的一个接口,用于对控制器方法接收到的请求数据进行统一的处理。它可以通过实现该接口来实现对请求数据的统一处理
用例:
@ControllerAdvice
public class MyModelAttributeAdvice {
@ModelAttribute
public void handleModelAttributes(Model model) {
// 对Model中的属性进行统一处理
// ...
}
}
(27)@ModelAttributeAdvice 作用:用于自定义@ModelAttribute的处理。@ModelAttributeAdvice是Spring MVC中的一个接口,用于对控制器方法中使用@ModelAttribute注解的方法参数进行统一的处理。它可以通过实现该接口来实现对@ModelAttribute注解的方法参数的统一处理。
用例:
@ControllerAdvice
public class MyModelAttributeAdvice {
@ModelAttribute
public void handleModelAttributes(Model model) {
// 对Model中的属性进行统一处理
// ...
}
}
(28)@SessionAttributes 作用:指定哪些模型属性存储到session中。@SessionAttributes是Spring MVC中的一个注解,用于将模型数据存储到会话(session)中,以便多个请求之间共享数据。它可以用于控制器类上,表示将指定的模型属性存储到会话中。
用例:
@Controller
@SessionAttributes("user")
public class UserController {
@GetMapping("/user")
public String getUser(Model model) {
User user = userService.getUser();
model.addAttribute("user", user);
return "user";
}
// 其他控制器方法
}
未完待续......
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。