
Spring MVC框架的注解為Web開(kāi)發(fā)提供了一種簡(jiǎn)潔而強(qiáng)大的聲明式方法。從控制器的定義、請(qǐng)求映射、參數(shù)綁定到異常處理和響應(yīng)構(gòu)建,這些注解涵蓋了Web應(yīng)用程序開(kāi)發(fā)的各個(gè)方面。它們不僅簡(jiǎn)化了編碼工作,還增強(qiáng)了代碼的清晰度和應(yīng)用程序的可維護(hù)性。通過(guò)@Controller、@RequestMapping、@PathVariable、@RequestParam、@RequestBody等注解,Spring MVC使得處理復(fù)雜的Web請(qǐng)求變得容易,同時(shí)@Valid和@Validated注解確保了數(shù)據(jù)的準(zhǔn)確性。全局異常處理和響應(yīng)狀態(tài)管理通過(guò)@ExceptionHandler和@ResponseStatus注解實(shí)現(xiàn),而@ResponseBody和@RestController注解則為RESTful服務(wù)提供了便利。這些注解的集合構(gòu)成了Spring MVC的核心,使其成為開(kāi)發(fā)靈活且功能豐富的Web應(yīng)用程序的首選框架。
肖哥彈架構(gòu) 跟大家“彈彈” Spring常用注解
歷史熱點(diǎn)文章
- 28個(gè)驗(yàn)證注解,通過(guò)業(yè)務(wù)案例讓你精通Java數(shù)據(jù)校驗(yàn)(收藏篇)
- Java 8函數(shù)式編程全攻略:43種函數(shù)式業(yè)務(wù)代碼實(shí)戰(zhàn)案例解析(收藏版)
- 功能強(qiáng)大,代碼優(yōu)雅:Java8真實(shí)案例Stream大數(shù)據(jù)集高效之旅(收藏版)
- MySQL索引完全手冊(cè):真實(shí)業(yè)務(wù)圖文講解17種索引運(yùn)用技巧(必須收藏)
- 一個(gè)項(xiàng)目代碼講清楚DO/PO/BO/AO/E/DTO/DAO/ POJO/VO
@Controller
1.1 注解作用介紹 @Controller 注解用于標(biāo)識(shí)一個(gè)類為Spring MVC控制器,負(fù)責(zé)處理HTTP請(qǐng)求并返回視圖。
1.2 注解屬性介紹
- 無(wú)特定屬性。
1.3 請(qǐng)求參數(shù)案例
- 無(wú)。
1.4 注解業(yè)務(wù)案例
@Controller
public class MyController {
// 控制器方法定義...
}
@RestController
2.1 注解作用介紹 @RestController 注解是@Controller和@ResponseBody的組合,用于RESTful Web服務(wù)的控制器。
2.2 注解屬性介紹
- 無(wú)特定屬性。
2.3 請(qǐng)求參數(shù)案例
- 無(wú)。
2.4 注解業(yè)務(wù)案例
java
@RestController
public class MyRestController {
// 控制器中的方法將直接返回響應(yīng)體。
}
@RequestMapping
3.1 注解作用介紹 @RequestMapping 注解用于將HTTP請(qǐng)求映射到控制器的處理方法上。
3.2 注解屬性介紹
- value: 請(qǐng)求的URL路徑。
- method: 支持的HTTP方法。
- params: 請(qǐng)求參數(shù)條件。
- headers: 請(qǐng)求頭條件。
3.3 請(qǐng)求參數(shù)案例
- 例如,當(dāng)
value設(shè)置為"/users/{id}",method為RequestMethod.GET,params為"active=true",headers為"Accept=application/json"時(shí):
GET /users/123?active=true
Accept: application/json
3.4 注解業(yè)務(wù)案例
@RequestMapping(value = "/users/{id}", method = RequestMethod.GET, params = "active=true", headers = "Accept=application/json")
public ResponseEntity<List<User>> listActiveUsers(@PathVariable int id) {
// 根據(jù)用戶ID獲取激活用戶的列表。
}
@GetMapping
4.1 注解作用介紹 @GetMapping 注解用于映射GET請(qǐng)求到控制器的方法上。
4.2 注解屬性介紹
- value: 請(qǐng)求的URL路徑。
4.3 請(qǐng)求參數(shù)案例
- 例如,當(dāng)
value設(shè)置為"/users/{id}"時(shí),請(qǐng)求/users/123將映射到方法:
GET /users/123
4.4 注解業(yè)務(wù)案例
@GetMapping("/users/{id}")
public User getUser(@PathVariable int id) {
// 根據(jù)路徑變量{id}獲取用戶信息。
}
@PostMapping
5.1 注解作用介紹 @PostMapping 注解用于映射POST請(qǐng)求到控制器的方法上。
5.2 注解屬性介紹
- value: 請(qǐng)求的URL路徑。
5.3 請(qǐng)求參數(shù)案例
- 例如,當(dāng)
value設(shè)置為"/users"時(shí),帶有JSON請(qǐng)求體的POST請(qǐng)求將映射到方法:
POST /users
Content-Type: application/json
{
"name": "John Doe",
"age": 30
}
5.4 注解業(yè)務(wù)案例
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 使用JSON請(qǐng)求體中的數(shù)據(jù)創(chuàng)建新用戶。
}
@PutMapping
6.1 注解作用介紹 @PutMapping 注解用于映射HTTP PUT請(qǐng)求到控制器的方法上,通常用于更新資源。
6.2 注解屬性介紹
- value: 請(qǐng)求的URL路徑。
6.3 請(qǐng)求參數(shù)案例
- 例如,當(dāng)
value設(shè)置為"/users/{id}"時(shí),請(qǐng)求將映射到更新用戶的方法:
PUT /users/123
Content-Type: application/json
{
"name": "Jane Doe",
"age": 25
}
6.4 注解業(yè)務(wù)案例
@PutMapping("/users/{id}")
public User updateUser(@PathVariable int id, @RequestBody User userDetails) {
// 使用請(qǐng)求體中的數(shù)據(jù)更新指定ID的用戶信息。
}
@DeleteMapping
7.1 注解作用介紹 @DeleteMapping 注解用于映射HTTP DELETE請(qǐng)求到控制器的方法上,用于刪除資源。
7.2 注解屬性介紹
- value: 請(qǐng)求的URL路徑。
7.3 請(qǐng)求參數(shù)案例
- 例如,當(dāng)
value設(shè)置為"/users/{id}"時(shí),請(qǐng)求將映射到刪除用戶的方法:
DELETE /users/123
7.4 注解業(yè)務(wù)案例
@DeleteMapping("/users/{id}")
public ResponseEntity<?> deleteUser(@PathVariable int id) {
// 根據(jù)用戶ID刪除用戶。
}
@PatchMapping
8.1 注解作用介紹 @PatchMapping 注解用于映射HTTP PATCH請(qǐng)求到控制器的方法上,通常用于部分更新資源。
8.2 注解屬性介紹
- value: 請(qǐng)求的URL路徑。
8.3 請(qǐng)求參數(shù)案例
- 例如,當(dāng)
value設(shè)置為"/users/{id}"時(shí),請(qǐng)求將映射到部分更新用戶的方法:
PATCH /users/123
Content-Type: application/json
{
"name": "Jane Doe"
}
8.4 注解業(yè)務(wù)案例
@PatchMapping("/users/{id}")
public User patchUser(@PathVariable int id, @RequestBody Map<String, Object> updates) {
// 使用請(qǐng)求體中的部分?jǐn)?shù)據(jù)更新指定ID的用戶信息。
}
@RequestParam
9.1 注解作用介紹 @RequestParam 注解用于將請(qǐng)求參數(shù)綁定到控制器方法的參數(shù)上。
9.2 注解屬性介紹
- value: 請(qǐng)求參數(shù)的名稱。
- required: 指示參數(shù)是否必須。
- defaultValue: 參數(shù)的默認(rèn)值。
9.3 請(qǐng)求參數(shù)案例
- 例如,當(dāng)請(qǐng)求包含查詢參數(shù)
"page"和"size"時(shí):
GET /items?page=1&size=10
9.4 注解業(yè)務(wù)案例
@GetMapping("/items")
public List<Item> listItems(
@RequestParam(value = "page", defaultValue = "1") int page,
@RequestParam(value = "size", defaultValue = "10") int size
) {
// 根據(jù)請(qǐng)求的頁(yè)碼和大小返回項(xiàng)目列表。
}
@PathVariable
10.1 注解作用介紹 @PathVariable 注解用于將URL中的模板變量綁定到控制器方法的參數(shù)上。
10.2 注解屬性介紹
- value: 模板變量的名稱。
- required: 指示變量是否必須。
10.3 請(qǐng)求參數(shù)案例
- 例如,當(dāng)URL模板包含
"{id}"時(shí),請(qǐng)求/users/123將映射到方法:
GET /users/123
10.4 注解業(yè)務(wù)案例
@GetMapping("/users/{id}")
public User getUserById(@PathVariable int id) {
// 根據(jù)URL路徑變量{id}獲取用戶信息。
}
@RequestBody
11.1 注解作用介紹 @RequestBody 注解用于將請(qǐng)求體綁定到控制器方法的參數(shù)上。
11.2 注解屬性介紹
- 無(wú)特定屬性。
11.3 請(qǐng)求參數(shù)案例
- 例如,POST請(qǐng)求包含JSON格式的請(qǐng)求體:
POST /users
Content-Type: application/json
{
"name": "John Doe",
"age": 30
}
11.4 注解業(yè)務(wù)案例
@PostMapping("/users")
public User createUser(@RequestBody User user) {
// 使用請(qǐng)求體中的數(shù)據(jù)創(chuàng)建新用戶。
}
@RequestHeader
12.1 注解作用介紹 @RequestHeader 注解用于將請(qǐng)求頭綁定到控制器方法的參數(shù)上。
12.2 注解屬性介紹
- value: 請(qǐng)求頭的名稱。
- required: 指示請(qǐng)求頭是否必須。
12.3 請(qǐng)求參數(shù)案例
- 例如,請(qǐng)求包含自定義請(qǐng)求頭
"X-Request-ID":
GET /users
X-Request-ID: 123456789
12.4 注解業(yè)務(wù)案例
@GetMapping("/users")
public List<User> listUsers(@RequestHeader(value = "X-Request-ID", required = false) String requestId) {
// 根據(jù)請(qǐng)求頭"X-Request-ID"記錄日志或進(jìn)行追蹤。
}
@CookieValue
13.1 注解作用介紹 @CookieValue 注解用于將請(qǐng)求中Cookie的值綁定到控制器方法的參數(shù)上。
13.2 注解屬性介紹
- value: Cookie的名稱。
- required: 指示Cookie是否必須。
13.3 請(qǐng)求參數(shù)案例
- 例如,請(qǐng)求包含名為
"sessionId"的Cookie:
GET /users
Cookie: sessionId=abc123def456
13.4 注解業(yè)務(wù)案例
@GetMapping("/users")
public List<User> listUsers(@CookieValue(value = "sessionId", required = false) String sessionId) {
// 根據(jù)Cookie中的"sessionId"進(jìn)行會(huì)話管理。
}
@ModelAttribute
14.1 注解作用介紹 @ModelAttribute 注解用于將請(qǐng)求參數(shù)或表單數(shù)據(jù)綁定到模型屬性上。
14.2 注解屬性介紹
- value: 模型屬性的名稱。
- required: 指示模型屬性是否必須。
14.3 請(qǐng)求參數(shù)案例
- 例如,一個(gè)包含用戶信息的POST請(qǐng)求:
POST /users
Content-Type: application/x-www-form-urlencoded
name=John+Doe&age=30
14.4 注解業(yè)務(wù)案例
@PostMapping("/users")
public String addUser(Model model, @ModelAttribute User user) {
model.addAttribute("user", user);
// 將用戶信息添加到模型中,以便在視圖中展示。
}
@SessionAttribute
15.1 注解作用介紹 @SessionAttribute 注解用于將模型屬性存儲(chǔ)到HTTP會(huì)話中。
15.2 注解屬性介紹
- name: 會(huì)話屬性的名稱。
- value: 會(huì)話屬性的值。
15.3 請(qǐng)求參數(shù)案例
- 例如,將用戶信息存儲(chǔ)在會(huì)話中,以便跨請(qǐng)求訪問(wèn):
GET /user/profile
Cookie: JSESSIONID=abc123; user=John Doe
15.4 注解業(yè)務(wù)案例
@SessionAttribute(name = "user")
public String showProfile(Model model) {
String user = (String) model.asMap().get("user");
// 從會(huì)話中獲取用戶信息。
}
@RequestAttribute
16.1 注解作用介紹 @RequestAttribute 注解用于將請(qǐng)求屬性綁定到控制器方法的參數(shù)上。
16.2 注解屬性介紹
- value: 請(qǐng)求屬性的名稱。
16.3 請(qǐng)求參數(shù)案例
- 例如,從請(qǐng)求轉(zhuǎn)發(fā)中攜帶屬性:
POST /login
...
Redirect /user/profile?role=admin
16.4 注解業(yè)務(wù)案例
@GetMapping("/user/profile")
public String showProfile(@RequestAttribute("role") String role) {
// 根據(jù)請(qǐng)求屬性"role"展示不同的用戶信息。
}
@ResponseStatus
17.1 注解作用介紹 @ResponseStatus 注解用于指定HTTP響應(yīng)的status。
17.2 注解屬性介紹
- value: 指定的HTTP狀態(tài)。
17.3 請(qǐng)求參數(shù)案例
- 例如,當(dāng)資源未找到時(shí)返回404狀態(tài):
GET /users/999
HTTP/1.1 404 Not Found
17.4 注解業(yè)務(wù)案例
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public ResponseEntity<Object> handleResourceNotFound() {
// 處理資源未找到的異常。
}
}
@ExceptionHandler
18.1 注解作用介紹 @ExceptionHandler 注解用于處理控制器中拋出的特定異常。
18.2 注解屬性介紹
- value: 指定異常的類型。
18.3 請(qǐng)求參數(shù)案例
- 例如,捕獲并處理自定義的業(yè)務(wù)異常:
POST /users
...
HTTP/1.1 400 Bad Request
18.4 注解業(yè)務(wù)案例
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(BusinessException.class)
public ResponseEntity<Object> handleBusinessException(BusinessException ex) {
// 處理業(yè)務(wù)異常。
}
}
@CrossOrigin
19.1 注解作用介紹 @CrossOrigin 注解用于啟用跨源請(qǐng)求。
19.2 注解屬性介紹
- origins: 允許的來(lái)源。
- methods: 允許的HTTP方法。
- allowedHeaders: 允許的請(qǐng)求頭。
19.3 請(qǐng)求參數(shù)案例
- 例如,允許特定域名進(jìn)行跨域GET請(qǐng)求:
OPTIONS /api/data
Access-Control-Request-Method: GET
Origin: http://example.com
19.4 注解業(yè)務(wù)案例
@CrossOrigin(origins = "http://example.com", methods = {RequestMethod.GET})
@GetMapping("/api/data")
public List<Data> getAllData() {
// 返回?cái)?shù)據(jù)列表,允許跨域GET請(qǐng)求。
}
@MatrixVariable
20.1 注解作用介紹 @MatrixVariable 注解用于從URL的矩陣變量中獲取值。
20.2 注解屬性介紹
- pathVar: 指定矩陣變量所在的路徑變量名稱。
20.3 請(qǐng)求參數(shù)案例
- 例如,從URL中獲取矩陣變量的值:
GET /api/users/123;role=admin
20.4 注解業(yè)務(wù)案例
@GetMapping("/api/users/{id}")
public User getUser(@MatrixVariable(name = "role", pathVar = "id") String role) {
// 根據(jù)矩陣變量"role"獲取用戶角色。
}
@InitBinder
21.1 注解作用介紹 @InitBinder 注解用于在控制器中初始化WebDataBinder,通常用于注冊(cè)自定義屬性編輯器。
21.2 注解屬性介紹
- 無(wú)特定屬性。
21.3 請(qǐng)求參數(shù)案例
- 無(wú)特定請(qǐng)求參數(shù)。
21.4 注解業(yè)務(wù)案例
@Controller
public class MyController {
@InitBinder
public void initBinder(WebDataBinder binder) {
// 注冊(cè)自定義屬性編輯器。
}
}
@ResponseStatus
22.1 注解作用介紹 @ResponseStatus 注解用于設(shè)置響應(yīng)的HTTP狀態(tài)碼。
22.2 注解屬性介紹
- value: 指定的HTTP狀態(tài)碼。
22.3 請(qǐng)求參數(shù)案例
- 例如,當(dāng)發(fā)生特定異常時(shí),返回HTTP 503 Service Unavailable狀態(tài)碼。
22.4 注解業(yè)務(wù)案例
@ResponseStatus(value = HttpStatus.SERVICE_UNAVAILABLE)
public class ServiceUnavailableException extends RuntimeException {
// 自定義異常類。
}
@Validated
23.1 注解作用介紹 @Validated 注解用于在類或方法級(jí)別指定驗(yàn)證組,增強(qiáng)驗(yàn)證邏輯。
23.2 注解屬性介紹
- groups: 指定驗(yàn)證組。
23.3 請(qǐng)求參數(shù)案例
- 例如,使用特定的驗(yàn)證組對(duì)用戶注冊(cè)信息進(jìn)行驗(yàn)證。
23.4 注解業(yè)務(wù)案例
@Validated(UserValidationGroup.class)
public class UserRegistrationController {
// 該控制器中的方法將使用UserValidationGroup驗(yàn)證組。
}
@Validated Annotation with Groups
24.1 注解作用介紹 @Validated 注解與groups屬性結(jié)合使用,允許在方法級(jí)別指定多個(gè)驗(yàn)證組。
24.2 注解屬性介紹
- value: 指定的驗(yàn)證組數(shù)組。
24.3 請(qǐng)求參數(shù)案例
- 例如,對(duì)更新操作使用不同的驗(yàn)證組。
24.4 注解業(yè)務(wù)案例
@Validated({UpdateGroup.class, AnotherUpdateGroup.class})
public void updateEntity(@Valid @NotNull MyEntity entity) {
// 使用多個(gè)驗(yàn)證組對(duì)實(shí)體進(jìn)行驗(yàn)證。
}
@RequestBodyAdvice
25.1 注解作用介紹 @RequestBodyAdvice 注解用于在讀取請(qǐng)求正文之前或之后對(duì)請(qǐng)求正文進(jìn)行處理。
25.2 注解屬性介紹
- beforeBodyRead: 指定在讀取請(qǐng)求正文之前的處理。
- afterBodyRead: 指定在讀取請(qǐng)求正文之后的處理。
25.3 請(qǐng)求參數(shù)案例
- 例如,對(duì)請(qǐng)求正文進(jìn)行日志記錄或修改。
25.4 注解業(yè)務(wù)案例
@ControllerAdvice
public class MyRequestBodyAdvice {
@RequestBodyAdvice(beforeBodyRead = "logBeforeRead")
public void logRequestBody() {
// 在讀取請(qǐng)求正文之前進(jìn)行日志記錄。
}
}
@ControllerAdvice
26.1 注解作用介紹 @ControllerAdvice 注解用于定義一個(gè)類,該類可以包含多個(gè)@ExceptionHandler、@InitBinder和@ModelAttribute方法。
26.2 注解屬性介紹
- basePackages: 指定要掃描的包。
26.3 請(qǐng)求參數(shù)案例
- 無(wú)特定請(qǐng)求參數(shù)。
26.4 注解業(yè)務(wù)案例
@ControllerAdvice
public class MyGlobalControllerAdvice {
// 包含全局異常處理、屬性初始化和模型屬性的方法。
}
@MatrixParam
27.1 注解作用介紹 @MatrixParam 注解用于從URL的矩陣變量中獲取值。
27.2 注解屬性介紹
- name: 矩陣變量的名稱。
27.3 請(qǐng)求參數(shù)案例
- 例如,從URL中獲取矩陣變量的值:
GET /users;role=admin/123
27.4 注解業(yè)務(wù)案例
@GetMapping("/users/{id}")
public User getUser(@MatrixParam(name = "role") String role) {
// 根據(jù)矩陣變量"role"獲取用戶角色。
}
@SessionAttributes
28.1 注解作用介紹 @SessionAttributes 注解用于將模型屬性添加到HTTP會(huì)話中,以便在多個(gè)請(qǐng)求之間保持它們的值。
28.2 注解屬性介紹
- names: 要存儲(chǔ)在會(huì)話中的屬性名稱數(shù)組。
- types: 要存儲(chǔ)在會(huì)話中的屬性類型。
28.3 請(qǐng)求參數(shù)案例
- 例如,將用戶信息存儲(chǔ)在會(huì)話中,以便在用戶會(huì)話期間保持狀態(tài):
GET /user/profile
Cookie: JSESSIONID=abc123; user=John Doe
28.4 注解業(yè)務(wù)案例
@Controller
@SessionAttributes("user")
public class UserController {
// 這個(gè)控制器中的模型屬性"user"將被存儲(chǔ)在會(huì)話中。
}
@RequestAttribute
29.1 注解作用介紹 @RequestAttribute 注解用于將請(qǐng)求屬性綁定到控制器方法的參數(shù)上。
29.2 注解屬性介紹
- value: 請(qǐng)求屬性的名稱。
29.3 請(qǐng)求參數(shù)案例
- 例如,從請(qǐng)求中獲取屬性"searchQuery":
GET /search?searchQuery=spring
29.4 注解業(yè)務(wù)案例
@GetMapping("/search")
public String search(@RequestAttribute("searchQuery") String query) {
// 使用請(qǐng)求屬性"searchQuery"執(zhí)行搜索。
}
@ModelAttribute
30.1 注解作用介紹 @ModelAttribute 注解用于將請(qǐng)求參數(shù)或會(huì)話屬性綁定到模型對(duì)象上。
30.2 注解屬性介紹
- value: 模型對(duì)象的名稱。
30.3 請(qǐng)求參數(shù)案例
- 例如,將表單提交的參數(shù)綁定到用戶對(duì)象上:
POST /user/register
Content-Type: application/x-www-form-urlencoded
name=John+Doe&email=john.doe@example.com
30.4 注解業(yè)務(wù)案例
@PostMapping("/user/register")
public String registerUser(@ModelAttribute("user") User user) {
// 使用模型中的"user"對(duì)象注冊(cè)新用戶。
}
@CookieValue
31.1 注解作用介紹 @CookieValue 注解用于將請(qǐng)求中的Cookie值綁定到控制器方法的參數(shù)上。
31.2 注解屬性介紹
- value: Cookie的名稱。
31.3 請(qǐng)求參數(shù)案例
- 例如,從請(qǐng)求中獲取名為"sessionId"的Cookie值:
GET /user/profile
Cookie: sessionId=abc123
31.4 注解業(yè)務(wù)案例
@GetMapping("/user/profile")
public String showProfile(@CookieValue("sessionId") String sessionId) {
// 使用Cookie中的"sessionId"進(jìn)行會(huì)話管理。
}
@RequestBody
32.1 注解作用介紹 @RequestBody 注解用于將請(qǐng)求正文綁定到控制器方法的參數(shù)上。
32.2 注解屬性介紹
- 無(wú)特定屬性。
32.3 請(qǐng)求參數(shù)案例
- 例如,接收J(rèn)SON格式的請(qǐng)求正文:
POST /api/data
Content-Type: application/json
{
"key": "value"
}
32.4 注解業(yè)務(wù)案例
@PostMapping("/api/data")
public DataItem createDataItem(@RequestBody DataItem data) {
// 使用請(qǐng)求正文中的數(shù)據(jù)創(chuàng)建新的數(shù)據(jù)項(xiàng)。
}
@ResponseBody
33.1 注解作用介紹 @ResponseBody 注解用于指示方法的返回值直接作為HTTP響應(yīng)正文返回。
33.2 注解屬性介紹
- 無(wú)特定屬性。
33.3 請(qǐng)求參數(shù)案例
- 例如,返回JSON格式的響應(yīng)正文:
GET /api/data/1
Content-Type: application/json
{
"id": 1,
"key": "value"
}
33.4 注解業(yè)務(wù)案例
@GetMapping("/api/data/{id}")
@ResponseBody
public DataItem getDataItem(@PathVariable int id) {
// 直接將數(shù)據(jù)項(xiàng)作為JSON響應(yīng)正文返回。
}
@ResponseStatus
34.1 注解作用介紹 @ResponseStatus 注解用于設(shè)置響應(yīng)的HTTP狀態(tài)碼。
34.2 注解屬性介紹
- value: 指定的HTTP狀態(tài)碼。
34.3 請(qǐng)求參數(shù)案例
- 無(wú)特定請(qǐng)求參數(shù)。
34.4 注解業(yè)務(wù)案例
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
// 自定義異常,用于當(dāng)資源未找到時(shí)。
}
@ExceptionHandler
35.1 注解作用介紹 @ExceptionHandler 注解用于處理控制器拋出的特定異常。
35.2 注解屬性介紹
- value: 指定異常的類型。
35.3 請(qǐng)求參數(shù)案例
- 無(wú)特定請(qǐng)求參數(shù)。
35.4 注解業(yè)務(wù)案例
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<String> handleResourceNotFound() {
// 處理資源未找到的異常。
}
}
@ControllerAdvice
36.1 注解作用介紹 @ControllerAdvice 注解用于定義一個(gè)類,該類可以包含多個(gè)@ExceptionHandler、@InitBinder和@ModelAttribute方法,用于全局異常處理和數(shù)據(jù)綁定。
36.2 注解屬性介紹
- basePackages: 指定要掃描的包。
36.3 請(qǐng)求參數(shù)案例
- 無(wú)特定請(qǐng)求參數(shù)。
36.4 注解業(yè)務(wù)案例
@ControllerAdvice
public class GlobalControllerAdvice {
// 包含全局異常處理、屬性初始化和模型屬性的方法。
}
@MatrixVariable
37.1 注解作用介紹 @MatrixVariable 注解用于從URL的矩陣變量中獲取值。
37.2 注解屬性介紹
- pathVar: 指定矩陣變量所在的路徑變量名稱。
37.3 請(qǐng)求參數(shù)案例
- 例如,從URL中獲取矩陣變量的值:
GET /users;role=admin/123
37.4 注解業(yè)務(wù)案例
@GetMapping("/users/{id}")
public User getUser(@MatrixVariable(name = "role", pathVar = "id") String role) {
// 根據(jù)矩陣變量"role"獲取用戶角色。
}
@CrossOrigin
38.1 注解作用介紹 @CrossOrigin 注解用于啟用跨源請(qǐng)求。
38.2 注解屬性介紹
- origins: 允許的來(lái)源。
- methods: 允許的HTTP方法。
- allowedHeaders: 允許的請(qǐng)求頭。
38.3 請(qǐng)求參數(shù)案例
- 例如,允許特定域名進(jìn)行跨域GET請(qǐng)求:
OPTIONS /api/data
Access-Control-Request-Method: GET
Origin: http://example.com
38.4 注解業(yè)務(wù)案例
@CrossOrigin(origins = "http://example.com", methods = {RequestMethod.GET})
@GetMapping("/api/data")
public List<Data> getAllData() {
// 返回?cái)?shù)據(jù)列表,允許跨域GET請(qǐng)求。
}
@PostMapping
39.1 注解作用介紹 @PostMapping 注解用于映射HTTP POST請(qǐng)求到控制器的方法上。
39.2 注解屬性介紹
- value: 請(qǐng)求的URL路徑。
- consumes: 指定請(qǐng)求體的媒體類型。
39.3 請(qǐng)求參數(shù)案例
- 例如,發(fā)送POST請(qǐng)求創(chuàng)建新用戶:
POST /users
Content-Type: application/json
{
"name": "John Doe",
"email": "john.doe@example.com"
}
39.4 注解業(yè)務(wù)案例
@PostMapping("/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
// 使用請(qǐng)求體中的數(shù)據(jù)創(chuàng)建新用戶。
}
@GetMapping
40.1 注解作用介紹 @GetMapping 注解用于映射HTTP GET請(qǐng)求到控制器的方法上。
40.2 注解屬性介紹
- value: 請(qǐng)求的URL路徑。
40.3 請(qǐng)求參數(shù)案例
- 例如,發(fā)送GET請(qǐng)求獲取用戶列表:
GET /users
40.4 注解業(yè)務(wù)案例
@GetMapping("/users")
public List<User> getUsers() {
// 獲取用戶列表。
}
@PutMapping
41.1 注解作用介紹 @PutMapping 注解用于映射HTTP PUT請(qǐng)求到控制器的方法上,通常用于更新資源。
41.2 注解屬性介紹
- value: 請(qǐng)求的URL路徑。
- consumes: 指定請(qǐng)求體的媒體類型。
41.3 請(qǐng)求參數(shù)案例
- 例如,發(fā)送PUT請(qǐng)求更新用戶信息:
PUT /users/1
Content-Type: application/json
{
"name": "Jane Doe",
"email": "jane.doe@example.com"
}
41.4 注解業(yè)務(wù)案例
@PutMapping("/users/{id}")
public ResponseEntity<User> updateUser(@PathVariable int id, @RequestBody User userDetails) {
// 使用請(qǐng)求體中的數(shù)據(jù)更新指定ID的用戶信息。
}
@DeleteMapping
42.1 注解作用介紹 @DeleteMapping 注解用于映射HTTP DELETE請(qǐng)求到控制器的方法上,用于刪除資源。
42.2 注解屬性介紹
- value: 請(qǐng)求的URL路徑。
42.3 請(qǐng)求參數(shù)案例
- 例如,發(fā)送DELETE請(qǐng)求刪除用戶:
DELETE /users/1
42.4 注解業(yè)務(wù)案例
@DeleteMapping("/users/{id}")
public ResponseEntity<?> deleteUser(@PathVariable int id) {
// 根據(jù)用戶ID刪除用戶。
}
@PatchMapping
43.1 注解作用介紹 @PatchMapping 注解用于映射HTTP PATCH請(qǐng)求到控制器的方法上,通常用于部分更新資源。
43.2 注解屬性介紹
- value: 請(qǐng)求的URL路徑。
- consumes: 指定請(qǐng)求體的媒體類型。
43.3 請(qǐng)求參數(shù)案例
- 例如,發(fā)送PATCH請(qǐng)求部分更新用戶信息:
PATCH /users/1
Content-Type: application/json
{
"name": "Jane Doe"
}
43.4 注解業(yè)務(wù)案例
@PatchMapping("/users/{id}")
public ResponseEntity<User> patchUser(@PathVariable int id, @RequestBody Map<String, Object> updates) {
// 使用請(qǐng)求體中的部分?jǐn)?shù)據(jù)更新指定ID的用戶信息。
}
@RequestMapping
44.1 注解作用介紹 @RequestMapping 注解是一個(gè)通用的請(qǐng)求映射注解,可以用于映射不同類型的HTTP請(qǐng)求到控制器的處理方法。
44.2 注解屬性介紹
- value: 請(qǐng)求的URL路徑。
- method: 支持的HTTP方法。
- params: 根據(jù)請(qǐng)求參數(shù)的存在或不存在來(lái)決定是否匹配。
- headers: 根據(jù)請(qǐng)求頭來(lái)決定是否匹配。
44.3 請(qǐng)求參數(shù)案例
- 例如,映射滿足特定請(qǐng)求參數(shù)和頭條件的GET請(qǐng)求:
GET /users?active=true
Accept: application/json
44.4 注解業(yè)務(wù)案例
@RequestMapping(value = "/users", method = RequestMethod.GET, params = "active", headers = "Accept=application/json")
public List<User> getActiveUsers() {
// 根據(jù)請(qǐng)求參數(shù)和頭信息獲取激活用戶列表。
}
@PostMapping with consumes Attribute
45.1 注解作用介紹 @PostMapping 注解與 consumes 屬性結(jié)合使用,用于指定請(qǐng)求體的媒體類型。
45.2 注解屬性介紹
-
consumes: 指定請(qǐng)求體的媒體類型,如
application/json。
45.3 請(qǐng)求參數(shù)案例
- 例如,發(fā)送POST請(qǐng)求創(chuàng)建新用戶,請(qǐng)求體為JSON格式:
POST /users
Content-Type: application/json
{
"name": "John Doe",
"email": "john.doe@example.com"
}
45.4 注解業(yè)務(wù)案例
@PostMapping(value = "/users", consumes = "application/json")
public ResponseEntity<User> createUser(@RequestBody User user) {
// 使用JSON請(qǐng)求體中的數(shù)據(jù)創(chuàng)建新用戶。
}
@GetMapping with produces Attribute
46.1 注解作用介紹 @GetMapping 注解與 produces 屬性結(jié)合使用,用于指定響應(yīng)的媒體類型。
46.2 注解屬性介紹
-
produces: 指定響應(yīng)的媒體類型,如
application/json。
46.3 請(qǐng)求參數(shù)案例
- 例如,發(fā)送GET請(qǐng)求獲取用戶列表,期望響應(yīng)為JSON格式:
GET /users
Accept: application/json
46.4 注解業(yè)務(wù)案例
@GetMapping(value = "/users", produces = "application/json")
public ResponseEntity<List<User>> getUsers() {
// 以JSON格式返回用戶列表。
}
@ExceptionHandler with responseBody Attribute
47.1 注解作用介紹 @ExceptionHandler 注解與 responseBody 屬性結(jié)合使用,用于返回異常信息。
47.2 注解屬性介紹
- responseBody: 指定異常處理方法的返回值是否作為響應(yīng)正文。
47.3 請(qǐng)求參數(shù)案例
- 例如,處理資源未找到的異常,并返回JSON格式的錯(cuò)誤信息:
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 注解業(yè)務(wù)案例
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
@ResponseBody
public ResponseEntity<Object> handleResourceNotFound() {
// 返回JSON格式的錯(cuò)誤信息。
}
}
@ControllerAdvice with basePackages
48.1 注解作用介紹 @ControllerAdvice 注解與 basePackages 屬性結(jié)合使用,用于定義全局異常處理和數(shù)據(jù)綁定的類。
48.2 注解屬性介紹
-
basePackages: 指定要掃描的包,這些包中的控制器將使用
@ControllerAdvice類中定義的方法。
48.3 請(qǐng)求參數(shù)案例
- 無(wú)特定請(qǐng)求參數(shù)。
48.4 注解業(yè)務(wù)案例
@ControllerAdvice(basePackages = "com.example.web")
public class GlobalControllerAdvice {
// 包含全局異常處理、屬性初始化和模型屬性的方法。
}
@SessionAttribute with name
49.1 注解作用介紹 @SessionAttribute 注解與 name 屬性結(jié)合使用,用于從HTTP會(huì)話中獲取屬性。
49.2 注解屬性介紹
- name: 指定會(huì)話屬性的名稱。
49.3 請(qǐng)求參數(shù)案例
- 例如,從會(huì)話中獲取名為"user"的屬性:
GET /user/profile
Cookie: JSESSIONID=abc123; user=John Doe
49.4 注解業(yè)務(wù)案例
@GetMapping("/user/profile")
public String showProfile(@SessionAttribute("user") String user) {
// 使用會(huì)話中的"user"屬性展示用戶信息。
}
@RequestHeader
50.1 注解作用介紹 @RequestHeader 注解用于將特定的HTTP請(qǐng)求頭值綁定到控制器方法的參數(shù)上。
50.2 注解屬性介紹
- value: 請(qǐng)求頭的名稱。
- defaultValue: 當(dāng)請(qǐng)求頭不存在時(shí)使用的默認(rèn)值。
50.3 請(qǐng)求參數(shù)案例
- 例如,獲取
User-Agent請(qǐng)求頭的值:
GET /api/resource
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
50.4 注解業(yè)務(wù)案例
@GetMapping("/api/resource")
public ResponseEntity<?> handleRequest(@RequestHeader("User-Agent") String userAgent) {
// 根據(jù)User-Agent處理請(qǐng)求。
}
@CookieValue
51.1 注解作用介紹 @CookieValue 注解用于將特定的Cookie值綁定到控制器方法的參數(shù)上。
51.2 注解屬性介紹
- value: Cookie的名稱。
- defaultValue: 當(dāng)Cookie不存在時(shí)使用的默認(rèn)值。
51.3 請(qǐng)求參數(shù)案例
- 例如,獲取名為
sessionId的Cookie的值:
GET /api/resource
Cookie: sessionId=abc123
51.4 注解業(yè)務(wù)案例
@GetMapping("/api/resource")
public ResponseEntity<?> handleRequest(@CookieValue("sessionId") String sessionId) {
// 根據(jù)sessionId處理請(qǐng)求。
}
@MatrixVariable
52.1 注解作用介紹 @MatrixVariable 注解用于從URL的矩陣變量中提取值。
52.2 注解屬性介紹
- pathVar: 指定矩陣變量所在的路徑變量。
52.3 請(qǐng)求參數(shù)案例
- 例如,從
/api/users;role=admin/123中提取role矩陣變量的值。
52.4 注解業(yè)務(wù)案例
@GetMapping("/api/users/{id}")
public ResponseEntity<?> handleRequest(@MatrixVariable(pathVar="id", name="role") String role) {
// 根據(jù)用戶角色處理請(qǐng)求。
}
@PathVariable
53.1 注解作用介紹 @PathVariable 注解用于從URL路徑模板中提取變量值。
53.2 注解屬性介紹
- value: 路徑變量的名稱。
53.3 請(qǐng)求參數(shù)案例
- 例如,從
/api/users/123中提取用戶ID:
GET /api/users/123
53.4 注解業(yè)務(wù)案例
@GetMapping("/api/users/{id}")
public ResponseEntity<?> handleRequest(@PathVariable int id) {
// 根據(jù)用戶ID處理請(qǐng)求。
}
@ModelAttribute
54.1 注解作用介紹 @ModelAttribute 注解用于將提交的表單數(shù)據(jù)綁定到模型對(duì)象。
54.2 注解屬性介紹
- value: 模型屬性的名稱。
54.3 請(qǐng)求參數(shù)案例
- 例如,將表單數(shù)據(jù)綁定到
User對(duì)象:
POST /api/users
Content-Type: application/x-www-form-urlencoded
name=John+Doe&email=john.doe@example.com
54.4 注解業(yè)務(wù)案例
@PostMapping("/api/users")
public ResponseEntity<?> addUser(@ModelAttribute User user) {
// 使用綁定的User對(duì)象創(chuàng)建新用戶。
}
@RequestBody
55.1 注解作用介紹 @RequestBody 注解用于將請(qǐng)求體綁定到控制器方法的參數(shù)上。
55.2 注解屬性介紹
- 無(wú)特定屬性。
55.3 請(qǐng)求參數(shù)案例
- 例如,接收J(rèn)SON格式的請(qǐng)求體創(chuàng)建新用戶:
POST /api/users
Content-Type: application/json
{
"name": "John Doe",
"email": "john.doe@example.com"
}
55.4 注解業(yè)務(wù)案例
@PostMapping("/api/users")
public ResponseEntity<?> addUser(@RequestBody User user) {
// 使用JSON請(qǐng)求體中的數(shù)據(jù)創(chuàng)建新用戶。
}
@ResponseBody
56.1 注解作用介紹 @ResponseBody 注解用于指示方法的返回值直接作為HTTP響應(yīng)正文返回。
56.2 注解屬性介紹
- 無(wú)特定屬性。
56.3 請(qǐng)求參數(shù)案例
- 無(wú)特定請(qǐng)求參數(shù)。
56.4 注解業(yè)務(wù)案例
@GetMapping("/api/data")
@ResponseBody
public Data getData() {
// 直接將返回的數(shù)據(jù)作為響應(yīng)正文。
}
@RestControllerAdvice
57.1 注解作用介紹 @RestControllerAdvice 是一個(gè)組合注解,它結(jié)合了 @ControllerAdvice 和 @ResponseBody。用于全局異常處理和返回JSON格式的響應(yīng)。
57.2 注解屬性介紹
- basePackages: 指定要掃描的包。
- 無(wú)其他特定屬性。
57.3 請(qǐng)求參數(shù)案例
- 無(wú)特定請(qǐng)求參數(shù)。
57.4 注解業(yè)務(wù)案例
@RestControllerAdvice(basePackages = "com.example.controller")
public class GlobalRestExceptionHandler {
// 處理控制器拋出的異常,并返回JSON格式的響應(yīng)。
}
@Component
58.1 注解作用介紹 @Component 是Spring的通用注解,用于標(biāo)識(shí)一個(gè)類為Spring組件,可以被自動(dòng)掃描和注冊(cè)為Spring應(yīng)用上下文的Bean。
58.2 注解屬性介紹
- value: 指定組件的名稱。
58.3 請(qǐng)求參數(shù)案例
- 無(wú)特定請(qǐng)求參數(shù)。
58.4 注解業(yè)務(wù)案例
@Component("myComponent")
public class MyComponent {
// 這個(gè)類會(huì)被Spring自動(dòng)注冊(cè)為一個(gè)Bean。
}
@Service
59.1 注解作用介紹 @Service 是Spring的注解,用于標(biāo)識(shí)一個(gè)類為服務(wù)層組件,通常包含業(yè)務(wù)邏輯。
59.2 注解屬性介紹
- 無(wú)特定屬性。
59.3 請(qǐng)求參數(shù)案例
- 無(wú)特定請(qǐng)求參數(shù)。
59.4 注解業(yè)務(wù)案例
@Service
public class MyService {
// 服務(wù)層組件,包含業(yè)務(wù)邏輯。
}
@Repository
60.1 注解作用介紹 @Repository 是Spring Data的注解,用于標(biāo)識(shí)一個(gè)類為數(shù)據(jù)訪問(wèn)對(duì)象,通常用于數(shù)據(jù)庫(kù)訪問(wèn)。
60.2 注解屬性介紹
- 無(wú)特定屬性。
60.3 請(qǐng)求參數(shù)案例
- 無(wú)特定請(qǐng)求參數(shù)。
60.4 注解業(yè)務(wù)案例
@Repository
public interface MyRepository extends JpaRepository<User, Long> {
// 定義數(shù)據(jù)訪問(wèn)方法。
}
@Autowired
61.1 注解作用介紹 @Autowired 是Spring的注解,用于自動(dòng)裝配依賴。
61.2 注解屬性介紹
-
required: 指定是否必須進(jìn)行自動(dòng)裝配,默認(rèn)為
true。 - value: 指定要注入的Bean的名稱。
61.3 請(qǐng)求參數(shù)案例
- 無(wú)特定請(qǐng)求參數(shù)。
61.4 注解業(yè)務(wù)案例
@Component
public class MyComponent {
@Autowired
private MyService service;
// MyService的實(shí)例將被自動(dòng)注入。
}
@Qualifier
62.1 注解作用介紹 @Qualifier 注解用于解決Spring容器中存在多個(gè)相同類型的Bean時(shí)的自動(dòng)裝配問(wèn)題。
62.2 注解屬性介紹
- value: 指定要注入的Bean的名稱。
62.3 請(qǐng)求參數(shù)案例
- 無(wú)特定請(qǐng)求參數(shù)。
62.4 注解業(yè)務(wù)案例
@Component("serviceA")
public class MyServiceA {
// ...
}
@Component("serviceB")
public class MyServiceB {
// ...
}
@Component
public class MyComponent {
@Autowired
@Qualifier("serviceA")
private MyService service;
// MyServiceA的實(shí)例將被注入。
}
@Profile
63.1 注解作用介紹 @Profile 注解用于根據(jù)激活的配置文件激活或禁用Bean。
63.2 注解屬性介紹
- value: 指定配置文件的名稱。
63.3 請(qǐng)求參數(shù)案例
- 無(wú)特定請(qǐng)求參數(shù)。
63.4 注解業(yè)務(wù)案例
@Component
@Profile("dev")
public class DevConfig {
// 僅在"dev"配置文件激活時(shí)使用。
}
@RequestMapping
64.1 注解作用介紹 @RequestMapping 注解用于映射Web請(qǐng)求到控制器的處理方法上,支持多種HTTP動(dòng)作。
64.2 注解屬性介紹
- value: 請(qǐng)求的URL路徑。
- method: 限定請(qǐng)求的動(dòng)作類型,如GET、POST等。
- params: 根據(jù)請(qǐng)求參數(shù)的存在或不存在來(lái)決定是否匹配。
- headers: 根據(jù)請(qǐng)求頭來(lái)決定是否匹配。
64.3 請(qǐng)求參數(shù)案例
- 例如,映射GET請(qǐng)求到特定路徑,并根據(jù)請(qǐng)求參數(shù)進(jìn)行條件匹配:
GET /api/users?active=true
64.4 注解業(yè)務(wù)案例
@Controller
@RequestMapping("/api/users")
public class UserController {
@RequestMapping(method = RequestMethod.GET, params = "active")
public ResponseEntity<List<User>> getActiveUsers() {
// 獲取激活狀態(tài)的用戶列表。
}
}
@PathVariable
65.1 注解作用介紹 @PathVariable 注解用于從URL路徑模板中提取變量。
65.2 注解屬性介紹
- value 或 name: 指定路徑變量的名稱。
65.3 請(qǐng)求參數(shù)案例
- 例如,從
/api/users/123路徑中提取用戶ID:
GET /api/users/123
65.4 注解業(yè)務(wù)案例
@GetMapping("/api/users/{id}")
public ResponseEntity<User> getUserById(@PathVariable int id) {
// 根據(jù)路徑變量ID獲取用戶信息。
}
@RequestParam
66.1 注解作用介紹 @RequestParam 注解用于從請(qǐng)求的查詢字符串參數(shù)中綁定值。
66.2 注解屬性介紹
- value 或 name: 請(qǐng)求參數(shù)的名稱。
- required: 指示參數(shù)是否必須。
- defaultValue: 當(dāng)參數(shù)不存在時(shí)使用的默認(rèn)值。
66.3 請(qǐng)求參數(shù)案例
- 例如,從請(qǐng)求中獲取名為
sort的查詢參數(shù):
GET /api/users?sort=asc
66.4 注解業(yè)務(wù)案例
@GetMapping("/api/users")
public ResponseEntity<List<User>> getUsersBySort(
@RequestParam(name = "sort", defaultValue = "asc") String sort
) {
// 根據(jù)查詢參數(shù)sort對(duì)用戶列表進(jìn)行排序。
}
@RequestPart
67.1 注解作用介紹 @RequestPart 注解用于處理multipart/form-data請(qǐng)求中的部分,如文件上傳。
67.2 注解屬性介紹
- value: 請(qǐng)求部分的名稱。
67.3 請(qǐng)求參數(shù)案例
- 例如,處理包含文件的multipart請(qǐng)求:
POST /api/upload
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary
------WebKitFormBoundary
Content-Disposition: form-data; name="file"; filename="image.png"
Content-Type: image/png
[文件內(nèi)容]
------WebKitFormBoundary--
67.4 注解業(yè)務(wù)案例
@PostMapping("/api/upload")
public ResponseEntity<String> handleFileUpload(
@RequestPart("file") MultipartFile file
) {
// 處理上傳的文件。
}
@ModelAttribute
68.1 注解作用介紹 @ModelAttribute 注解用于將請(qǐng)求參數(shù)或表單數(shù)據(jù)綁定到模型對(duì)象。
68.2 注解屬性介紹
- value: 模型屬性的名稱。
68.3 請(qǐng)求參數(shù)案例
- 例如,將表單提交的數(shù)據(jù)綁定到用戶對(duì)象:
POST /api/users
Content-Type: application/x-www-form-urlencoded
name=John+Doe&email=john.doe@example.com
68.4 注解業(yè)務(wù)案例
@PostMapping("/api/users")
public ResponseEntity<User> createUserFromForm(
@ModelAttribute User user
) {
// 使用綁定的用戶對(duì)象創(chuàng)建新用戶。
}
@MatrixVariable
69.1 注解作用介紹 @MatrixVariable 注解用于從URL的矩陣變量中提取值。
69.2 注解屬性介紹
- pathVar: 指定矩陣變量所在的路徑變量。
69.3 請(qǐng)求參數(shù)案例
- 例如,從
/api/users;role=admin/123中提取角色信息:
GET /api/users;role=admin/123
69.4 注解業(yè)務(wù)案例
@GetMapping("/api/users/{id}")
public ResponseEntity<User> getUserWithRole(
@PathVariable int id,
@MatrixVariable(pathVar = "id", name = "role") String role
) {
// 根據(jù)用戶ID和角色信息獲取用戶。
}