Stories

Detail Return Return

69 個Spring mvc 全部註解:真實業務使用案例説明(必須收藏) - Stories Detail

image.png

Spring MVC框架的註解為Web開發提供了一種簡潔而強大的聲明式方法。從控制器的定義、請求映射、參數綁定到異常處理和響應構建,這些註解涵蓋了Web應用程序開發的各個方面。它們不僅簡化了編碼工作,還增強了代碼的清晰度和應用程序的可維護性。通過@Controller@RequestMapping@PathVariable@RequestParam@RequestBody等註解,Spring MVC使得處理複雜的Web請求變得容易,同時@Valid@Validated註解確保了數據的準確性。全局異常處理和響應狀態管理通過@ExceptionHandler@ResponseStatus註解實現,而@ResponseBody@RestController註解則為RESTful服務提供了便利。這些註解的集合構成了Spring MVC的核心,使其成為開發靈活且功能豐富的Web應用程序的首選框架。

肖哥彈架構 跟大家“彈彈” Spring常用註解

歷史熱點文章

  • 28個驗證註解,通過業務案例讓你精通Java數據校驗(收藏篇)
  • Java 8函數式編程全攻略:43種函數式業務代碼實戰案例解析(收藏版)
  • 功能強大,代碼優雅:Java8真實案例Stream大數據集高效之旅(收藏版)
  • MySQL索引完全手冊:真實業務圖文講解17種索引運用技巧(必須收藏)
  • 一個項目代碼講清楚DO/PO/BO/AO/E/DTO/DAO/ POJO/VO

@Controller

1.1 註解作用介紹 @Controller 註解用於標識一個類為Spring MVC控制器,負責處理HTTP請求並返回視圖。

1.2 註解屬性介紹

  • 無特定屬性。

1.3 請求參數案例

  • 無。

1.4 註解業務案例

@Controller
public class MyController {
    // 控制器方法定義...
}

@RestController

2.1 註解作用介紹 @RestController 註解是@Controller@ResponseBody的組合,用於RESTful Web服務的控制器。
2.2 註解屬性介紹

  • 無特定屬性。

2.3 請求參數案例

  • 無。

2.4 註解業務案例

java
@RestController
public 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=true
    Accept: 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 /users
    Content-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/123
    Content-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/123
    Content-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 /users
    Content-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 /users
    X-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 /users
    Cookie: 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 /users
    Content-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/profile
    Cookie: 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/999
    HTTP/1.1 404 Not Found

    17.4 註解業務案例

    @ControllerAdvice
    public 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 註解業務案例

    @ControllerAdvice
    public 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/data
    Access-Control-Request-Method: GET
    Origin: 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 註解業務案例

@Controller
public 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 註解業務案例

@ControllerAdvice
public class MyRequestBodyAdvice {
    @RequestBodyAdvice(beforeBodyRead = "logBeforeRead")
    public void logRequestBody() {
        // 在讀取請求正文之前進行日誌記錄。
    }
}

@ControllerAdvice

26.1 註解作用介紹 @ControllerAdvice 註解用於定義一個類,該類可以包含多個@ExceptionHandler@InitBinder@ModelAttribute方法。

26.2 註解屬性介紹

  • basePackages: 指定要掃描的包。

26.3 請求參數案例

  • 無特定請求參數。

26.4 註解業務案例

@ControllerAdvice
public 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/profile
    Cookie: 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/register
    Content-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/profile
    Cookie: 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/data
    Content-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/1
    Content-Type: application/json
    
    {
      "id": 1,
      "key": "value"
    }

    33.4 註解業務案例

    @GetMapping("/api/data/{id}")
    @ResponseBody
    public 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 註解業務案例

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(ResourceNotFoundException.class)
    public ResponseEntity<String> handleResourceNotFound() {
        // 處理資源未找到的異常。
    }
}

@ControllerAdvice

36.1 註解作用介紹 @ControllerAdvice 註解用於定義一個類,該類可以包含多個@ExceptionHandler@InitBinder@ModelAttribute方法,用於全局異常處理和數據綁定。

36.2 註解屬性介紹

  • basePackages: 指定要掃描的包。

36.3 請求參數案例

  • 無特定請求參數。

36.4 註解業務案例

@ControllerAdvice
public 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/data
    Access-Control-Request-Method: GET
    Origin: 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 /users
    Content-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/1
    Content-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/1
    Content-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=true
    Accept: 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 /users
    Content-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 /users
    Accept: 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/999
    HTTP/1.1 404 Not Found
    Content-Type: application/json
    
    {"timestamp": "2023-10-10T12:00:00", "status": 404, "error": "Not Found"}

    47.4 註解業務案例

    @ControllerAdvice
    public 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/profile
    Cookie: 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/resource
    User-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/resource
    Cookie: 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/users
    Content-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/users
    Content-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")
@ResponseBody
public 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 註解業務案例

@Service
public class MyService {
    // 服務層組件,包含業務邏輯。
}

@Repository

60.1 註解作用介紹 @Repository 是Spring Data的註解,用於標識一個類為數據訪問對象,通常用於數據庫訪問。

60.2 註解屬性介紹

  • 無特定屬性。

60.3 請求參數案例

  • 無特定請求參數。

60.4 註解業務案例

@Repository
public interface MyRepository extends JpaRepository<User, Long> {
    // 定義數據訪問方法。
}

@Autowired

61.1 註解作用介紹 @Autowired 是Spring的註解,用於自動裝配依賴。

61.2 註解屬性介紹

  • required: 指定是否必須進行自動裝配,默認為 true
  • value: 指定要注入的Bean的名稱。

61.3 請求參數案例

  • 無特定請求參數。

61.4 註解業務案例

@Component
public 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 {
    // ...
}

@Component
public 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/upload
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
    
    ------WebKitFormBoundary
    Content-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/users
    Content-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和角色信息獲取用户。
    }

Add a new Comments

Some HTML is okay.