SpringMVC框架中的常用注解(全是干货,干的要死!)

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 {

    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable Long id) {
        // ...
    }
}

(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中非常常用。它能够帮助我们实现全局控制器通知的功能,提高代码的可读性和可维护性。

(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状态码为201Created)。

在DispatcherServlet初始化时,会注册RequestMappingHandlerMapping,并将其与所有使用了@Controller注解的类关联起来。当请求到达DispatcherServlet时,RequestMappingHandlerMapping会遍历所有已注册的控制器类和方法,找到与请求匹配的控制器方法,并返回对应的HandlerExecutionChain对象,该对象包含了控制器方法和一系列拦截器。

总之,RequestMappingHandlerMappingSpring MVC中的一个HandlerMapping实现类,用于将请求映射到控制器方法。它能够帮助我们实现请求映射和控制器方法的调度,提高代码的可读性和可维护性。

(20)@RequestMappingHandlerAdapter

作用:将@RequestMapping注解解析为一个请求适配器

用例:

@RequestMappingHandlerAdapterSpring MVC中的一个HandlerAdapter实现类,用于将请求处理结果转换为HTTP响应。它是一个用于处理@RequestMapping注解的HandlerAdapter实现类之一,在Spring MVC中非常常用。

RequestMappingHandlerAdapter根据请求URL和请求方法(GET、POST等)将请求映射到对应的控制器方法,并调用该方法获取处理结果。然后,它会根据处理结果的类型选择对应的MessageConverter将其转换为HTTP响应的正文,并设置HTTP响应头部信息。最后,它会返回一个ModelAndView对象或void类型的结果,或直接将响应信息写入HTTP响应流中。

RequestMappingHandlerAdapter还支持使用HandlerMethodArgumentResolver解析控制器方法的参数,以及使用HandlerMethodReturnValueHandler处理控制器方法的返回值。它可以通过配置MessageConverterReturnValueHandler来实现。

总之,RequestMappingHandlerAdapterSpring 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 MyRequestBodyAdvice implements RequestBodyAdvice {

    @Override
    public boolean supports(MethodParameter methodParameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
        // 判断是否需要对该请求类型进行处理
        // ...
    }

    @Override
    public Object beforeBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType,
                                 Class<? extends HttpMessageConverter<?>> converterType) {
        // 对请求数据进行统一处理
        // ...
        return processedBody;
    }
}

(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";
    }
    
    // 其他控制器方法
}

如有补充,欢迎留言!

  • 11
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨小羊-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值