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}",method為RequestMethod.GET,params為"active=true",headers為"Accept=application/json"時:GET /users/123?active=true Accept: application/json3.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/1234.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/1237.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=109.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/12310.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: 12345678912.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=abc123def45613.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=3014.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 Doe15.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=admin16.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 Found17.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 Request18.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.com19.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=admin20.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/12327.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 Doe28.4 註解業務案例
@Controller @SessionAttributes("user") public class UserController { // 這個控制器中的模型屬性"user"將被存儲在會話中。 }@RequestAttribute
29.1 註解作用介紹
@RequestAttribute註解用於將請求屬性綁定到控制器方法的參數上。
29.2 註解屬性介紹
- value: 請求屬性的名稱。
29.3 請求參數案例
-
例如,從請求中獲取屬性"searchQuery":
GET /search?searchQuery=spring29.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.com30.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=abc12331.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.com38.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 /users40.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/142.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/json44.4 註解業務案例
@RequestMapping(value = "/users", method = RequestMethod.GET, params = "active", headers = "Accept=application/json") public List<User> getActiveUsers() { // 根據請求參數和頭信息獲取激活用户列表。 }@PostMapping with
consumesAttribute45.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
producesAttribute46.1 註解作用介紹
@GetMapping註解與produces屬性結合使用,用於指定響應的媒體類型。
46.2 註解屬性介紹
- produces: 指定響應的媒體類型,如
application/json。
46.3 請求參數案例
-
例如,發送GET請求獲取用户列表,期望響應為JSON格式:
GET /users Accept: application/json46.4 註解業務案例
@GetMapping(value = "/users", produces = "application/json") public ResponseEntity<List<User>> getUsers() { // 以JSON格式返回用户列表。 }@ExceptionHandler with
responseBodyAttribute47.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
basePackages48.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 Doe49.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=abc12351.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/12353.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.com54.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=true64.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/12365.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=asc66.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.com68.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/12369.4 註解業務案例
@GetMapping("/api/users/{id}") public ResponseEntity<User> getUserWithRole( @PathVariable int id, @MatrixVariable(pathVar = "id", name = "role") String role ) { // 根據用户ID和角色信息獲取用户。 }