写点什么

69 个 Spring mvc 全部注解:真实业务使用案例说明 (必须收藏)

作者:肖哥弹架构
  • 2024-08-06
    河北
  • 本文字数:15039 字

    阅读完需:约 49 分钟

69 个Spring mvc 全部注解:真实业务使用案例说明(必须收藏)

Spring MVC 框架的注解为 Web 开发提供了一种简洁而强大的声明式方法。从控制器的定义、请求映射、参数绑定到异常处理和响应构建,这些注解涵盖了 Web 应用程序开发的各个方面。它们不仅简化了编码工作,还增强了代码的清晰度和应用程序的可维护性。通过@Controller@RequestMapping@PathVariable@RequestParam@RequestBody等注解,Spring MVC 使得处理复杂的 Web 请求变得容易,同时@Valid@Validated注解确保了数据的准确性。全局异常处理和响应状态管理通过@ExceptionHandler@ResponseStatus注解实现,而@ResponseBody@RestController注解则为 RESTful 服务提供了便利。这些注解的集合构成了 Spring MVC 的核心,使其成为开发灵活且功能丰富的 Web 应用程序的首选框架。


肖哥弹架构 跟大家“弹弹” Spring 常用注解,需要代码关注

欢迎 点赞,关注,评论。

Solomon 肖哥弹架构获取更多精彩内容

历史热点文章

@Controller

1.1 注解作用介绍 @Controller 注解用于标识一个类为 Spring MVC 控制器,负责处理 HTTP 请求并返回视图。


1.2 注解属性介绍


  • 无特定属性。


1.3 请求参数案例


  • 无。


1.4 注解业务案例


@Controllerpublic class MyController {    // 控制器方法定义...}
复制代码

@RestController

2.1 注解作用介绍 @RestController 注解是@Controller@ResponseBody的组合,用于 RESTful Web 服务的控制器。2.2 注解属性介绍


  • 无特定属性。


2.3 请求参数案例


  • 无。


2.4 注解业务案例


java@RestControllerpublic class MyRestController {    // 控制器中的方法将直接返回响应体。}
复制代码

@RequestMapping

3.1 注解作用介绍 @RequestMapping 注解用于将 HTTP 请求映射到控制器的处理方法上。


3.2 注解属性介绍


  • value: 请求的 URL 路径。

  • method: 支持的 HTTP 方法。

  • params: 请求参数条件。

  • headers: 请求头条件。


3.3 请求参数案例


  • 例如,当value设置为"/users/{id}"methodRequestMethod.GETparams"active=true"headers"Accept=application/json"时:


GET /users/123?active=trueAccept: application/json
复制代码


3.4 注解业务案例


@RequestMapping(value = "/users/{id}", method = RequestMethod.GET, params = "active=true", headers = "Accept=application/json")public ResponseEntity<List<User>> listActiveUsers(@PathVariable int id) {    // 根据用户ID获取激活用户的列表。}
复制代码

@GetMapping

4.1 注解作用介绍 @GetMapping 注解用于映射 GET 请求到控制器的方法上。


4.2 注解属性介绍


  • value: 请求的 URL 路径。


4.3 请求参数案例


  • 例如,当value设置为"/users/{id}"时,请求/users/123将映射到方法:


GET /users/123
复制代码


4.4 注解业务案例


@GetMapping("/users/{id}")public User getUser(@PathVariable int id) {    // 根据路径变量{id}获取用户信息。}
复制代码

@PostMapping

5.1 注解作用介绍 @PostMapping 注解用于映射 POST 请求到控制器的方法上。


5.2 注解属性介绍


  • value: 请求的 URL 路径。


5.3 请求参数案例


  • 例如,当value设置为"/users"时,带有 JSON 请求体的 POST 请求将映射到方法:


POST /usersContent-Type: application/json{  "name": "John Doe",  "age": 30}
复制代码


5.4 注解业务案例


@PostMapping("/users")public User createUser(@RequestBody User user) {    // 使用JSON请求体中的数据创建新用户。}
复制代码

@PutMapping

6.1 注解作用介绍 @PutMapping 注解用于映射 HTTP PUT 请求到控制器的方法上,通常用于更新资源。


6.2 注解属性介绍


  • value: 请求的 URL 路径。


6.3 请求参数案例


  • 例如,当value设置为"/users/{id}"时,请求将映射到更新用户的方法:


PUT /users/123Content-Type: application/json
{ "name": "Jane Doe", "age": 25}
复制代码


6.4 注解业务案例


@PutMapping("/users/{id}")public User updateUser(@PathVariable int id, @RequestBody User userDetails) {    // 使用请求体中的数据更新指定ID的用户信息。}
复制代码

@DeleteMapping

7.1 注解作用介绍 @DeleteMapping 注解用于映射 HTTP DELETE 请求到控制器的方法上,用于删除资源。


7.2 注解属性介绍


  • value: 请求的 URL 路径。


7.3 请求参数案例


  • 例如,当value设置为"/users/{id}"时,请求将映射到删除用户的方法:


DELETE /users/123
复制代码


7.4 注解业务案例


@DeleteMapping("/users/{id}")public ResponseEntity<?> deleteUser(@PathVariable int id) {    // 根据用户ID删除用户。}
复制代码

@PatchMapping

8.1 注解作用介绍 @PatchMapping 注解用于映射 HTTP PATCH 请求到控制器的方法上,通常用于部分更新资源。


8.2 注解属性介绍


  • value: 请求的 URL 路径。


8.3 请求参数案例


  • 例如,当value设置为"/users/{id}"时,请求将映射到部分更新用户的方法:


PATCH /users/123Content-Type: application/json
{ "name": "Jane Doe"}
复制代码


8.4 注解业务案例


@PatchMapping("/users/{id}")public User patchUser(@PathVariable int id, @RequestBody Map<String, Object> updates) {    // 使用请求体中的部分数据更新指定ID的用户信息。}
复制代码

@RequestParam

9.1 注解作用介绍 @RequestParam 注解用于将请求参数绑定到控制器方法的参数上。


9.2 注解属性介绍


  • value: 请求参数的名称。

  • required: 指示参数是否必须。

  • defaultValue: 参数的默认值。


9.3 请求参数案例


  • 例如,当请求包含查询参数"page""size"时:


GET /items?page=1&size=10
复制代码


9.4 注解业务案例


@GetMapping("/items")public List<Item> listItems(    @RequestParam(value = "page", defaultValue = "1") int page,    @RequestParam(value = "size", defaultValue = "10") int size) {    // 根据请求的页码和大小返回项目列表。}
复制代码

@PathVariable

10.1 注解作用介绍 @PathVariable 注解用于将 URL 中的模板变量绑定到控制器方法的参数上。


10.2 注解属性介绍


  • value: 模板变量的名称。

  • required: 指示变量是否必须。


10.3 请求参数案例


  • 例如,当 URL 模板包含"{id}"时,请求/users/123将映射到方法:


GET /users/123
复制代码


10.4 注解业务案例


@GetMapping("/users/{id}")public User getUserById(@PathVariable int id) {    // 根据URL路径变量{id}获取用户信息。}
复制代码

@RequestBody

11.1 注解作用介绍 @RequestBody 注解用于将请求体绑定到控制器方法的参数上。


11.2 注解属性介绍


  • 无特定属性。


11.3 请求参数案例


  • 例如,POST 请求包含 JSON 格式的请求体:


POST /usersContent-Type: application/json{  "name": "John Doe",  "age": 30}
复制代码


11.4 注解业务案例


@PostMapping("/users")public User createUser(@RequestBody User user) {    // 使用请求体中的数据创建新用户。}
复制代码

@RequestHeader

12.1 注解作用介绍 @RequestHeader 注解用于将请求头绑定到控制器方法的参数上。


12.2 注解属性介绍


  • value: 请求头的名称。

  • required: 指示请求头是否必须。


12.3 请求参数案例


  • 例如,请求包含自定义请求头"X-Request-ID"


GET /usersX-Request-ID: 123456789
复制代码


12.4 注解业务案例


@GetMapping("/users")public List<User> listUsers(@RequestHeader(value = "X-Request-ID", required = false) String requestId) {    // 根据请求头"X-Request-ID"记录日志或进行追踪。}
复制代码

@CookieValue

13.1 注解作用介绍 @CookieValue 注解用于将请求中 Cookie 的值绑定到控制器方法的参数上。


13.2 注解属性介绍


  • value: Cookie 的名称。

  • required: 指示 Cookie 是否必须。


13.3 请求参数案例


  • 例如,请求包含名为"sessionId"的 Cookie:


GET /usersCookie: sessionId=abc123def456
复制代码


13.4 注解业务案例


@GetMapping("/users")public List<User> listUsers(@CookieValue(value = "sessionId", required = false) String sessionId) {    // 根据Cookie中的"sessionId"进行会话管理。}
复制代码

@ModelAttribute

14.1 注解作用介绍 @ModelAttribute 注解用于将请求参数或表单数据绑定到模型属性上。


14.2 注解属性介绍


  • value: 模型属性的名称。

  • required: 指示模型属性是否必须。


14.3 请求参数案例


  • 例如,一个包含用户信息的 POST 请求:


POST /usersContent-Type: application/x-www-form-urlencoded
name=John+Doe&age=30
复制代码


14.4 注解业务案例


@PostMapping("/users")public String addUser(Model model, @ModelAttribute User user) {    model.addAttribute("user", user);    // 将用户信息添加到模型中,以便在视图中展示。}
复制代码

@SessionAttribute

15.1 注解作用介绍 @SessionAttribute 注解用于将模型属性存储到 HTTP 会话中。


15.2 注解属性介绍


  • name: 会话属性的名称。

  • value: 会话属性的值。


15.3 请求参数案例


  • 例如,将用户信息存储在会话中,以便跨请求访问:


GET /user/profileCookie: JSESSIONID=abc123; user=John Doe
复制代码


15.4 注解业务案例


@SessionAttribute(name = "user")public String showProfile(Model model) {    String user = (String) model.asMap().get("user");    // 从会话中获取用户信息。}
复制代码

@RequestAttribute

16.1 注解作用介绍 @RequestAttribute 注解用于将请求属性绑定到控制器方法的参数上。


16.2 注解属性介绍


  • value: 请求属性的名称。


16.3 请求参数案例


  • 例如,从请求转发中携带属性:


POST /login...
Redirect /user/profile?role=admin
复制代码


16.4 注解业务案例


@GetMapping("/user/profile")public String showProfile(@RequestAttribute("role") String role) {    // 根据请求属性"role"展示不同的用户信息。}
复制代码

@ResponseStatus

17.1 注解作用介绍 @ResponseStatus 注解用于指定 HTTP 响应的 status。


17.2 注解属性介绍


  • value: 指定的 HTTP 状态。


17.3 请求参数案例


  • 例如,当资源未找到时返回 404 状态:


GET /users/999HTTP/1.1 404 Not Found
复制代码


17.4 注解业务案例


@ControllerAdvicepublic class GlobalExceptionHandler {    @ExceptionHandler(ResourceNotFoundException.class)    @ResponseStatus(HttpStatus.NOT_FOUND)    public ResponseEntity<Object> handleResourceNotFound() {        // 处理资源未找到的异常。    }}
复制代码

@ExceptionHandler

18.1 注解作用介绍 @ExceptionHandler 注解用于处理控制器中抛出的特定异常。


18.2 注解属性介绍


  • value: 指定异常的类型。


18.3 请求参数案例


  • 例如,捕获并处理自定义的业务异常:


POST /users...HTTP/1.1 400 Bad Request
复制代码


18.4 注解业务案例


@ControllerAdvicepublic class GlobalExceptionHandler {    @ExceptionHandler(BusinessException.class)    public ResponseEntity<Object> handleBusinessException(BusinessException ex) {        // 处理业务异常。    }}
复制代码

@CrossOrigin

19.1 注解作用介绍 @CrossOrigin 注解用于启用跨源请求。


19.2 注解属性介绍


  • origins: 允许的来源。

  • methods: 允许的 HTTP 方法。

  • allowedHeaders: 允许的请求头。


19.3 请求参数案例


  • 例如,允许特定域名进行跨域 GET 请求:


OPTIONS /api/dataAccess-Control-Request-Method: GETOrigin: http://example.com
复制代码


19.4 注解业务案例


@CrossOrigin(origins = "http://example.com", methods = {RequestMethod.GET})@GetMapping("/api/data")public List<Data> getAllData() {    // 返回数据列表,允许跨域GET请求。}
复制代码

@MatrixVariable

20.1 注解作用介绍 @MatrixVariable 注解用于从 URL 的矩阵变量中获取值。


20.2 注解属性介绍


  • pathVar: 指定矩阵变量所在的路径变量名称。


20.3 请求参数案例


  • 例如,从 URL 中获取矩阵变量的值:


GET /api/users/123;role=admin
复制代码


20.4 注解业务案例


@GetMapping("/api/users/{id}")public User getUser(@MatrixVariable(name = "role", pathVar = "id") String role) {    // 根据矩阵变量"role"获取用户角色。}
复制代码

@InitBinder

21.1 注解作用介绍 @InitBinder 注解用于在控制器中初始化 WebDataBinder,通常用于注册自定义属性编辑器。


21.2 注解属性介绍


  • 无特定属性。


21.3 请求参数案例


  • 无特定请求参数。


21.4 注解业务案例


@Controllerpublic class MyController {    @InitBinder    public void initBinder(WebDataBinder binder) {        // 注册自定义属性编辑器。    }}
复制代码

@ResponseStatus

22.1 注解作用介绍 @ResponseStatus 注解用于设置响应的 HTTP 状态码。


22.2 注解属性介绍


  • value: 指定的 HTTP 状态码。


22.3 请求参数案例


  • 例如,当发生特定异常时,返回 HTTP 503 Service Unavailable 状态码。


22.4 注解业务案例


@ResponseStatus(value = HttpStatus.SERVICE_UNAVAILABLE)public class ServiceUnavailableException extends RuntimeException {    // 自定义异常类。}
复制代码

@Validated

23.1 注解作用介绍 @Validated 注解用于在类或方法级别指定验证组,增强验证逻辑。


23.2 注解属性介绍


  • groups: 指定验证组。


23.3 请求参数案例


  • 例如,使用特定的验证组对用户注册信息进行验证。


23.4 注解业务案例


@Validated(UserValidationGroup.class)public class UserRegistrationController {    // 该控制器中的方法将使用UserValidationGroup验证组。}
复制代码

@Validated Annotation with Groups

24.1 注解作用介绍 @Validated 注解与groups属性结合使用,允许在方法级别指定多个验证组。


24.2 注解属性介绍


  • value: 指定的验证组数组。


24.3 请求参数案例


  • 例如,对更新操作使用不同的验证组。


24.4 注解业务案例


@Validated({UpdateGroup.class, AnotherUpdateGroup.class})public void updateEntity(@Valid @NotNull MyEntity entity) {    // 使用多个验证组对实体进行验证。}
复制代码

@RequestBodyAdvice

25.1 注解作用介绍 @RequestBodyAdvice 注解用于在读取请求正文之前或之后对请求正文进行处理。


25.2 注解属性介绍


  • beforeBodyRead: 指定在读取请求正文之前的处理。

  • afterBodyRead: 指定在读取请求正文之后的处理。


25.3 请求参数案例


  • 例如,对请求正文进行日志记录或修改。


25.4 注解业务案例


@ControllerAdvicepublic class MyRequestBodyAdvice {    @RequestBodyAdvice(beforeBodyRead = "logBeforeRead")    public void logRequestBody() {        // 在读取请求正文之前进行日志记录。    }}
复制代码

@ControllerAdvice

26.1 注解作用介绍 @ControllerAdvice 注解用于定义一个类,该类可以包含多个@ExceptionHandler@InitBinder@ModelAttribute方法。


26.2 注解属性介绍


  • basePackages: 指定要扫描的包。


26.3 请求参数案例


  • 无特定请求参数。


26.4 注解业务案例


@ControllerAdvicepublic class MyGlobalControllerAdvice {    // 包含全局异常处理、属性初始化和模型属性的方法。}
复制代码

@MatrixParam

27.1 注解作用介绍 @MatrixParam 注解用于从 URL 的矩阵变量中获取值。


27.2 注解属性介绍


  • name: 矩阵变量的名称。


27.3 请求参数案例


  • 例如,从 URL 中获取矩阵变量的值:


GET /users;role=admin/123
复制代码


27.4 注解业务案例


@GetMapping("/users/{id}")public User getUser(@MatrixParam(name = "role") String role) {    // 根据矩阵变量"role"获取用户角色。}
复制代码

@SessionAttributes

28.1 注解作用介绍 @SessionAttributes 注解用于将模型属性添加到 HTTP 会话中,以便在多个请求之间保持它们的值。


28.2 注解属性介绍


  • names: 要存储在会话中的属性名称数组。

  • types: 要存储在会话中的属性类型。


28.3 请求参数案例


  • 例如,将用户信息存储在会话中,以便在用户会话期间保持状态:


GET /user/profileCookie: JSESSIONID=abc123; user=John Doe
复制代码


28.4 注解业务案例


@Controller@SessionAttributes("user")public class UserController {    // 这个控制器中的模型属性"user"将被存储在会话中。}
复制代码

@RequestAttribute

29.1 注解作用介绍 @RequestAttribute 注解用于将请求属性绑定到控制器方法的参数上。


29.2 注解属性介绍


  • value: 请求属性的名称。


29.3 请求参数案例


  • 例如,从请求中获取属性"searchQuery":


GET /search?searchQuery=spring
复制代码


29.4 注解业务案例


@GetMapping("/search")public String search(@RequestAttribute("searchQuery") String query) {    // 使用请求属性"searchQuery"执行搜索。}
复制代码

@ModelAttribute

30.1 注解作用介绍 @ModelAttribute 注解用于将请求参数或会话属性绑定到模型对象上。


30.2 注解属性介绍


  • value: 模型对象的名称。


30.3 请求参数案例


  • 例如,将表单提交的参数绑定到用户对象上:


POST /user/registerContent-Type: application/x-www-form-urlencoded
name=John+Doe&email=john.doe@example.com
复制代码


30.4 注解业务案例


@PostMapping("/user/register")public String registerUser(@ModelAttribute("user") User user) {    // 使用模型中的"user"对象注册新用户。}
复制代码

@CookieValue

31.1 注解作用介绍 @CookieValue 注解用于将请求中的 Cookie 值绑定到控制器方法的参数上。


31.2 注解属性介绍


  • value: Cookie 的名称。


31.3 请求参数案例


  • 例如,从请求中获取名为"sessionId"的 Cookie 值:


GET /user/profileCookie: sessionId=abc123
复制代码


31.4 注解业务案例


@GetMapping("/user/profile")public String showProfile(@CookieValue("sessionId") String sessionId) {    // 使用Cookie中的"sessionId"进行会话管理。}
复制代码

@RequestBody

32.1 注解作用介绍 @RequestBody 注解用于将请求正文绑定到控制器方法的参数上。


32.2 注解属性介绍


  • 无特定属性。


32.3 请求参数案例


  • 例如,接收 JSON 格式的请求正文:


POST /api/dataContent-Type: application/json
{ "key": "value"}
复制代码


32.4 注解业务案例


@PostMapping("/api/data")public DataItem createDataItem(@RequestBody DataItem data) {    // 使用请求正文中的数据创建新的数据项。}
复制代码

@ResponseBody

33.1 注解作用介绍 @ResponseBody 注解用于指示方法的返回值直接作为 HTTP 响应正文返回。


33.2 注解属性介绍


  • 无特定属性。


33.3 请求参数案例


  • 例如,返回 JSON 格式的响应正文:


GET /api/data/1Content-Type: application/json
{ "id": 1, "key": "value"}
复制代码


33.4 注解业务案例


@GetMapping("/api/data/{id}")@ResponseBodypublic DataItem getDataItem(@PathVariable int id) {    // 直接将数据项作为JSON响应正文返回。}
复制代码

@ResponseStatus

34.1 注解作用介绍 @ResponseStatus 注解用于设置响应的 HTTP 状态码。


34.2 注解属性介绍


  • value: 指定的 HTTP 状态码。


34.3 请求参数案例


  • 无特定请求参数。


34.4 注解业务案例


@ResponseStatus(HttpStatus.NOT_FOUND)public class ResourceNotFoundException extends RuntimeException {    // 自定义异常,用于当资源未找到时。}
复制代码

@ExceptionHandler

35.1 注解作用介绍 @ExceptionHandler 注解用于处理控制器抛出的特定异常。


35.2 注解属性介绍


  • value: 指定异常的类型。


35.3 请求参数案例


  • 无特定请求参数。


35.4 注解业务案例


@ControllerAdvicepublic class GlobalExceptionHandler {    @ExceptionHandler(ResourceNotFoundException.class)    public ResponseEntity<String> handleResourceNotFound() {        // 处理资源未找到的异常。    }}
复制代码

@ControllerAdvice

36.1 注解作用介绍 @ControllerAdvice 注解用于定义一个类,该类可以包含多个@ExceptionHandler@InitBinder@ModelAttribute方法,用于全局异常处理和数据绑定。


36.2 注解属性介绍


  • basePackages: 指定要扫描的包。


36.3 请求参数案例


  • 无特定请求参数。


36.4 注解业务案例


@ControllerAdvicepublic class GlobalControllerAdvice {    // 包含全局异常处理、属性初始化和模型属性的方法。}
复制代码

@MatrixVariable

37.1 注解作用介绍 @MatrixVariable 注解用于从 URL 的矩阵变量中获取值。


37.2 注解属性介绍


  • pathVar: 指定矩阵变量所在的路径变量名称。


37.3 请求参数案例


  • 例如,从 URL 中获取矩阵变量的值:


GET /users;role=admin/123
复制代码


37.4 注解业务案例


@GetMapping("/users/{id}")public User getUser(@MatrixVariable(name = "role", pathVar = "id") String role) {    // 根据矩阵变量"role"获取用户角色。}
复制代码

@CrossOrigin

38.1 注解作用介绍 @CrossOrigin 注解用于启用跨源请求。


38.2 注解属性介绍


  • origins: 允许的来源。

  • methods: 允许的 HTTP 方法。

  • allowedHeaders: 允许的请求头。


38.3 请求参数案例


  • 例如,允许特定域名进行跨域 GET 请求:


OPTIONS /api/dataAccess-Control-Request-Method: GETOrigin: http://example.com
复制代码


38.4 注解业务案例


@CrossOrigin(origins = "http://example.com", methods = {RequestMethod.GET})@GetMapping("/api/data")public List<Data> getAllData() {    // 返回数据列表,允许跨域GET请求。}
复制代码

@PostMapping

39.1 注解作用介绍 @PostMapping 注解用于映射 HTTP POST 请求到控制器的方法上。


39.2 注解属性介绍


  • value: 请求的 URL 路径。

  • consumes: 指定请求体的媒体类型。


39.3 请求参数案例


  • 例如,发送 POST 请求创建新用户:


POST /usersContent-Type: application/json
{ "name": "John Doe", "email": "john.doe@example.com"}
复制代码


39.4 注解业务案例


@PostMapping("/users")public ResponseEntity<User> createUser(@RequestBody User user) {    // 使用请求体中的数据创建新用户。}
复制代码

@GetMapping

40.1 注解作用介绍 @GetMapping 注解用于映射 HTTP GET 请求到控制器的方法上。


40.2 注解属性介绍


  • value: 请求的 URL 路径。


40.3 请求参数案例


  • 例如,发送 GET 请求获取用户列表:


GET /users
复制代码


40.4 注解业务案例


@GetMapping("/users")public List<User> getUsers() {    // 获取用户列表。}
复制代码

@PutMapping

41.1 注解作用介绍 @PutMapping 注解用于映射 HTTP PUT 请求到控制器的方法上,通常用于更新资源。


41.2 注解属性介绍


  • value: 请求的 URL 路径。

  • consumes: 指定请求体的媒体类型。


41.3 请求参数案例


  • 例如,发送 PUT 请求更新用户信息:


PUT /users/1Content-Type: application/json
{ "name": "Jane Doe", "email": "jane.doe@example.com"}
复制代码


41.4 注解业务案例


@PutMapping("/users/{id}")public ResponseEntity<User> updateUser(@PathVariable int id, @RequestBody User userDetails) {    // 使用请求体中的数据更新指定ID的用户信息。}
复制代码

@DeleteMapping

42.1 注解作用介绍 @DeleteMapping 注解用于映射 HTTP DELETE 请求到控制器的方法上,用于删除资源。


42.2 注解属性介绍


  • value: 请求的 URL 路径。


42.3 请求参数案例


  • 例如,发送 DELETE 请求删除用户:


DELETE /users/1
复制代码


42.4 注解业务案例


@DeleteMapping("/users/{id}")public ResponseEntity<?> deleteUser(@PathVariable int id) {    // 根据用户ID删除用户。}
复制代码

@PatchMapping

43.1 注解作用介绍 @PatchMapping 注解用于映射 HTTP PATCH 请求到控制器的方法上,通常用于部分更新资源。


43.2 注解属性介绍


  • value: 请求的 URL 路径。

  • consumes: 指定请求体的媒体类型。


43.3 请求参数案例


  • 例如,发送 PATCH 请求部分更新用户信息:


PATCH /users/1Content-Type: application/json
{ "name": "Jane Doe"}
复制代码


43.4 注解业务案例


@PatchMapping("/users/{id}")public ResponseEntity<User> patchUser(@PathVariable int id, @RequestBody Map<String, Object> updates) {    // 使用请求体中的部分数据更新指定ID的用户信息。}
复制代码

@RequestMapping

44.1 注解作用介绍 @RequestMapping 注解是一个通用的请求映射注解,可以用于映射不同类型的 HTTP 请求到控制器的处理方法。


44.2 注解属性介绍


  • value: 请求的 URL 路径。

  • method: 支持的 HTTP 方法。

  • params: 根据请求参数的存在或不存在来决定是否匹配。

  • headers: 根据请求头来决定是否匹配。


44.3 请求参数案例


  • 例如,映射满足特定请求参数和头条件的 GET 请求:


GET /users?active=trueAccept: application/json
复制代码


44.4 注解业务案例


@RequestMapping(value = "/users", method = RequestMethod.GET, params = "active", headers = "Accept=application/json")public List<User> getActiveUsers() {    // 根据请求参数和头信息获取激活用户列表。}
复制代码

@PostMapping with consumes Attribute

45.1 注解作用介绍 @PostMapping 注解与 consumes 属性结合使用,用于指定请求体的媒体类型。


45.2 注解属性介绍


  • consumes: 指定请求体的媒体类型,如 application/json


45.3 请求参数案例


  • 例如,发送 POST 请求创建新用户,请求体为 JSON 格式:


POST /usersContent-Type: application/json
{ "name": "John Doe", "email": "john.doe@example.com"}
复制代码


45.4 注解业务案例


@PostMapping(value = "/users", consumes = "application/json")public ResponseEntity<User> createUser(@RequestBody User user) {    // 使用JSON请求体中的数据创建新用户。}
复制代码

@GetMapping with produces Attribute

46.1 注解作用介绍 @GetMapping 注解与 produces 属性结合使用,用于指定响应的媒体类型。


46.2 注解属性介绍


  • produces: 指定响应的媒体类型,如 application/json


46.3 请求参数案例


  • 例如,发送 GET 请求获取用户列表,期望响应为 JSON 格式:


GET /usersAccept: application/json
复制代码


46.4 注解业务案例


@GetMapping(value = "/users", produces = "application/json")public ResponseEntity<List<User>> getUsers() {    // 以JSON格式返回用户列表。}
复制代码

@ExceptionHandler with responseBody Attribute

47.1 注解作用介绍 @ExceptionHandler 注解与 responseBody 属性结合使用,用于返回异常信息。


47.2 注解属性介绍


  • responseBody: 指定异常处理方法的返回值是否作为响应正文。


47.3 请求参数案例


  • 例如,处理资源未找到的异常,并返回 JSON 格式的错误信息:


GET /users/999HTTP/1.1 404 Not FoundContent-Type: application/json
{"timestamp": "2023-10-10T12:00:00", "status": 404, "error": "Not Found"}
复制代码


47.4 注解业务案例


@ControllerAdvicepublic class GlobalExceptionHandler {    @ExceptionHandler(ResourceNotFoundException.class)    @ResponseBody    public ResponseEntity<Object> handleResourceNotFound() {        // 返回JSON格式的错误信息。    }}
复制代码

@ControllerAdvice with basePackages

48.1 注解作用介绍 @ControllerAdvice 注解与 basePackages 属性结合使用,用于定义全局异常处理和数据绑定的类。


48.2 注解属性介绍


  • basePackages: 指定要扫描的包,这些包中的控制器将使用 @ControllerAdvice 类中定义的方法。


48.3 请求参数案例


  • 无特定请求参数。


48.4 注解业务案例


@ControllerAdvice(basePackages = "com.example.web")public class GlobalControllerAdvice {    // 包含全局异常处理、属性初始化和模型属性的方法。}
复制代码

@SessionAttribute with name

49.1 注解作用介绍 @SessionAttribute 注解与 name 属性结合使用,用于从 HTTP 会话中获取属性。


49.2 注解属性介绍


  • name: 指定会话属性的名称。


49.3 请求参数案例


  • 例如,从会话中获取名为"user"的属性:


GET /user/profileCookie: JSESSIONID=abc123; user=John Doe
复制代码


49.4 注解业务案例


@GetMapping("/user/profile")public String showProfile(@SessionAttribute("user") String user) {    // 使用会话中的"user"属性展示用户信息。}
复制代码

@RequestHeader

50.1 注解作用介绍 @RequestHeader 注解用于将特定的 HTTP 请求头值绑定到控制器方法的参数上。


50.2 注解属性介绍


  • value: 请求头的名称。

  • defaultValue: 当请求头不存在时使用的默认值。


50.3 请求参数案例


  • 例如,获取User-Agent请求头的值:


GET /api/resourceUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
复制代码


50.4 注解业务案例


@GetMapping("/api/resource")public ResponseEntity<?> handleRequest(@RequestHeader("User-Agent") String userAgent) {    // 根据User-Agent处理请求。}
复制代码

@CookieValue

51.1 注解作用介绍 @CookieValue 注解用于将特定的 Cookie 值绑定到控制器方法的参数上。


51.2 注解属性介绍


  • value: Cookie 的名称。

  • defaultValue: 当 Cookie 不存在时使用的默认值。


51.3 请求参数案例


  • 例如,获取名为sessionId的 Cookie 的值:


GET /api/resourceCookie: sessionId=abc123
复制代码


51.4 注解业务案例


@GetMapping("/api/resource")public ResponseEntity<?> handleRequest(@CookieValue("sessionId") String sessionId) {    // 根据sessionId处理请求。}
复制代码

@MatrixVariable

52.1 注解作用介绍 @MatrixVariable 注解用于从 URL 的矩阵变量中提取值。


52.2 注解属性介绍


  • pathVar: 指定矩阵变量所在的路径变量。


52.3 请求参数案例


  • 例如,从/api/users;role=admin/123中提取role矩阵变量的值。


52.4 注解业务案例


@GetMapping("/api/users/{id}")public ResponseEntity<?> handleRequest(@MatrixVariable(pathVar="id", name="role") String role) {    // 根据用户角色处理请求。}
复制代码

@PathVariable

53.1 注解作用介绍 @PathVariable 注解用于从 URL 路径模板中提取变量值。


53.2 注解属性介绍


  • value: 路径变量的名称。


53.3 请求参数案例


  • 例如,从/api/users/123中提取用户 ID:


GET /api/users/123
复制代码


53.4 注解业务案例


@GetMapping("/api/users/{id}")public ResponseEntity<?> handleRequest(@PathVariable int id) {    // 根据用户ID处理请求。}
复制代码

@ModelAttribute

54.1 注解作用介绍 @ModelAttribute 注解用于将提交的表单数据绑定到模型对象。


54.2 注解属性介绍


  • value: 模型属性的名称。


54.3 请求参数案例


  • 例如,将表单数据绑定到User对象:


POST /api/usersContent-Type: application/x-www-form-urlencoded
name=John+Doe&email=john.doe@example.com
复制代码


54.4 注解业务案例


@PostMapping("/api/users")public ResponseEntity<?> addUser(@ModelAttribute User user) {    // 使用绑定的User对象创建新用户。}
复制代码

@RequestBody

55.1 注解作用介绍 @RequestBody 注解用于将请求体绑定到控制器方法的参数上。


55.2 注解属性介绍


  • 无特定属性。


55.3 请求参数案例


  • 例如,接收 JSON 格式的请求体创建新用户:


POST /api/usersContent-Type: application/json{  "name": "John Doe",  "email": "john.doe@example.com"}
复制代码


55.4 注解业务案例


@PostMapping("/api/users")public ResponseEntity<?> addUser(@RequestBody User user) {    // 使用JSON请求体中的数据创建新用户。}
复制代码

@ResponseBody

56.1 注解作用介绍 @ResponseBody 注解用于指示方法的返回值直接作为 HTTP 响应正文返回。


56.2 注解属性介绍


  • 无特定属性。


56.3 请求参数案例


  • 无特定请求参数。


56.4 注解业务案例


@GetMapping("/api/data")@ResponseBodypublic Data getData() {    // 直接将返回的数据作为响应正文。}
复制代码

@RestControllerAdvice

57.1 注解作用介绍 @RestControllerAdvice 是一个组合注解,它结合了 @ControllerAdvice@ResponseBody。用于全局异常处理和返回 JSON 格式的响应。


57.2 注解属性介绍


  • basePackages: 指定要扫描的包。

  • 无其他特定属性。


57.3 请求参数案例


  • 无特定请求参数。


57.4 注解业务案例


@RestControllerAdvice(basePackages = "com.example.controller")public class GlobalRestExceptionHandler {    // 处理控制器抛出的异常,并返回JSON格式的响应。}
复制代码

@Component

58.1 注解作用介绍 @Component 是 Spring 的通用注解,用于标识一个类为 Spring 组件,可以被自动扫描和注册为 Spring 应用上下文的 Bean。


58.2 注解属性介绍


  • value: 指定组件的名称。


58.3 请求参数案例


  • 无特定请求参数。


58.4 注解业务案例


@Component("myComponent")public class MyComponent {    // 这个类会被Spring自动注册为一个Bean。}
复制代码

@Service

59.1 注解作用介绍 @Service 是 Spring 的注解,用于标识一个类为服务层组件,通常包含业务逻辑。


59.2 注解属性介绍


  • 无特定属性。


59.3 请求参数案例


  • 无特定请求参数。


59.4 注解业务案例


@Servicepublic class MyService {    // 服务层组件,包含业务逻辑。}
复制代码

@Repository

60.1 注解作用介绍 @Repository 是 Spring Data 的注解,用于标识一个类为数据访问对象,通常用于数据库访问。


60.2 注解属性介绍


  • 无特定属性。


60.3 请求参数案例


  • 无特定请求参数。


60.4 注解业务案例


@Repositorypublic interface MyRepository extends JpaRepository<User, Long> {    // 定义数据访问方法。}
复制代码

@Autowired

61.1 注解作用介绍 @Autowired 是 Spring 的注解,用于自动装配依赖。


61.2 注解属性介绍


  • required: 指定是否必须进行自动装配,默认为 true

  • value: 指定要注入的 Bean 的名称。


61.3 请求参数案例


  • 无特定请求参数。


61.4 注解业务案例


@Componentpublic class MyComponent {    @Autowired    private MyService service;
// MyService的实例将被自动注入。}
复制代码

@Qualifier

62.1 注解作用介绍 @Qualifier 注解用于解决 Spring 容器中存在多个相同类型的 Bean 时的自动装配问题。


62.2 注解属性介绍


  • value: 指定要注入的 Bean 的名称。


62.3 请求参数案例


  • 无特定请求参数。


62.4 注解业务案例


@Component("serviceA")public class MyServiceA {    // ...}
@Component("serviceB")public class MyServiceB { // ...}
@Componentpublic class MyComponent { @Autowired @Qualifier("serviceA") private MyService service;
// MyServiceA的实例将被注入。}
复制代码

@Profile

63.1 注解作用介绍 @Profile 注解用于根据激活的配置文件激活或禁用 Bean。


63.2 注解属性介绍


  • value: 指定配置文件的名称。


63.3 请求参数案例


  • 无特定请求参数。


63.4 注解业务案例


@Component@Profile("dev")public class DevConfig {    // 仅在"dev"配置文件激活时使用。}
复制代码

@RequestMapping

64.1 注解作用介绍 @RequestMapping 注解用于映射 Web 请求到控制器的处理方法上,支持多种 HTTP 动作。


64.2 注解属性介绍


  • value: 请求的 URL 路径。

  • method: 限定请求的动作类型,如 GET、POST 等。

  • params: 根据请求参数的存在或不存在来决定是否匹配。

  • headers: 根据请求头来决定是否匹配。


64.3 请求参数案例


  • 例如,映射 GET 请求到特定路径,并根据请求参数进行条件匹配:


GET /api/users?active=true
复制代码


64.4 注解业务案例


@Controller@RequestMapping("/api/users")public class UserController {    @RequestMapping(method = RequestMethod.GET, params = "active")    public ResponseEntity<List<User>> getActiveUsers() {        // 获取激活状态的用户列表。    }}
复制代码

@PathVariable

65.1 注解作用介绍 @PathVariable 注解用于从 URL 路径模板中提取变量。


65.2 注解属性介绍


  • value 或 name: 指定路径变量的名称。


65.3 请求参数案例


  • 例如,从/api/users/123路径中提取用户 ID:


GET /api/users/123
复制代码


65.4 注解业务案例


@GetMapping("/api/users/{id}")public ResponseEntity<User> getUserById(@PathVariable int id) {    // 根据路径变量ID获取用户信息。}
复制代码

@RequestParam

66.1 注解作用介绍 @RequestParam 注解用于从请求的查询字符串参数中绑定值。


66.2 注解属性介绍


  • value 或 name: 请求参数的名称。

  • required: 指示参数是否必须。

  • defaultValue: 当参数不存在时使用的默认值。


66.3 请求参数案例


  • 例如,从请求中获取名为sort的查询参数:


GET /api/users?sort=asc
复制代码


66.4 注解业务案例


@GetMapping("/api/users")public ResponseEntity<List<User>> getUsersBySort(    @RequestParam(name = "sort", defaultValue = "asc") String sort) {    // 根据查询参数sort对用户列表进行排序。}
复制代码

@RequestPart

67.1 注解作用介绍 @RequestPart 注解用于处理multipart/form-data请求中的部分,如文件上传。


67.2 注解属性介绍


  • value: 请求部分的名称。


67.3 请求参数案例


  • 例如,处理包含文件的 multipart 请求:


POST /api/uploadContent-Type: multipart/form-data; boundary=----WebKitFormBoundary
------WebKitFormBoundaryContent-Disposition: form-data; name="file"; filename="image.png"Content-Type: image/png
[文件内容]
------WebKitFormBoundary--
复制代码


67.4 注解业务案例


@PostMapping("/api/upload")public ResponseEntity<String> handleFileUpload(    @RequestPart("file") MultipartFile file) {    // 处理上传的文件。}
复制代码

@ModelAttribute

68.1 注解作用介绍 @ModelAttribute 注解用于将请求参数或表单数据绑定到模型对象。


68.2 注解属性介绍


  • value: 模型属性的名称。


68.3 请求参数案例


  • 例如,将表单提交的数据绑定到用户对象:


POST /api/usersContent-Type: application/x-www-form-urlencoded
name=John+Doe&email=john.doe@example.com
复制代码


68.4 注解业务案例


@PostMapping("/api/users")public ResponseEntity<User> createUserFromForm(    @ModelAttribute User user) {    // 使用绑定的用户对象创建新用户。}
复制代码

@MatrixVariable

69.1 注解作用介绍 @MatrixVariable 注解用于从 URL 的矩阵变量中提取值。


69.2 注解属性介绍


  • pathVar: 指定矩阵变量所在的路径变量。


69.3 请求参数案例


  • 例如,从/api/users;role=admin/123中提取角色信息:


GET /api/users;role=admin/123
复制代码


69.4 注解业务案例


@GetMapping("/api/users/{id}")public ResponseEntity<User> getUserWithRole(    @PathVariable int id,    @MatrixVariable(pathVar = "id", name = "role") String role) {    // 根据用户ID和角色信息获取用户。}
复制代码


发布于: 刚刚阅读数: 7
用户头像

智慧属心窍之锁 2019-05-27 加入

擅长于通信协议、微服务架构、框架设计、消息队列、服务治理、PAAS、SAAS、ACE\ACP、大模型

评论

发布
暂无评论
69 个Spring mvc 全部注解:真实业务使用案例说明(必须收藏)_spring_肖哥弹架构_InfoQ写作社区