1. @RequestParam
- @RequestParam:get請求時如果用不到它的3個屬性,可以省略;其他請求如果是通過param傳送數據,必須使用該注釋
- 要點:
- 可用于任何類型的請求(get請求數據在請求行中, post請求數據在請求體中)
- 無論時在請求行還是請求體,格式都是:username=zhangsan&password=1234&email=zhangsan@powernode.com
屬性
- value: 不解釋看代碼
- defaultValue :設置默認值
// 發送請求
request.get("/user"{params:{ // 必須使用paramspeopleAge: 20, }
})@GetMapping("/user")
// value屬性 :指明發送時url中的名字,和這里的名字做對應,peopleAge對應 age
public String getUser(@RequestParam(value = "peopleAge", defaultValue = "18") int age) {return "Your age is " + age;
}
- required :是否必須傳
@GetMapping("/user")
public String getUser(@RequestParam(required = false) String email) {if (email != null) {return "Your email is " + email;} else {return "No email provided.";}
}
2. @RequestBody
- @RequestBody: 最主要的用處,post請求時前端發送json格式字符串,后端用類接收
- 用法
- 可用于非get請求的其他請求
- 前端發送的是json字符串,后端用類接收
- @RequestBody不可以省略
- required屬性:是否必需傳
@PostMapping("/user/{id}")
public String updateUser(@RequestBody User user) {// 根據id更新用戶信息return "User updated successfully.";
}
- 請求
import axios from 'axios';// 假設后端接口地址
const baseUrl = 'http://localhost:8080';// 要發送的數據
const userData = {// 假設User類有name和age屬性,根據實際情況修改name: 'John Doe',age: 30
};// 發送POST請求的函數
const sendPostRequest = async () => {try {// 雖然沒有在請求頭中指明發送的是json格式,只要使用post請求,就會自動對第二個參數進行json格式化const response = await axios.post(`/user`, userData);console.log('請求成功', response.data);} catch (error) {console.error('請求失敗', error);}
};// 調用函數發送請求
sendPostRequest();
3. @PathVariable
- @PathVariable:發送Rest風格請求時使用
作用:
- Rest風格請求的占位符
- 可用于任何請求中,get、post、put等等
- 也有required 屬性
1. 基本使用
/users/123 //請求的url@GetMapping("/users/{userId}")
public String getUserById(@PathVariable("userId") Long id) {// 根據id從數據庫或其他數據源獲取用戶信息return "User with id " + id + " retrieved successfully.";
}
/orders/100/items/200 // 親求的url,多個@GetMapping("/orders/{orderId}/items/{itemId}")
public String getOrderItem(@PathVariable("orderId") Long orderId, @PathVariable("itemId") Long itemId) {// 根據orderId和itemId獲取訂單中的商品信息return "Retrieving item " + itemId + " from order " + orderId;
}
2. 與正則表達式配合使用
@GetMapping("/users/{userId:\\d+}")
public String getUserById(@PathVariable("userId") String userId) {// 這里可以確保userId是數字格式return "User with id " + userId + " retrieved successfully.";
}
4. 遇到的其他情況
特別注意順序,發送時參數的順序和接收時參數的順序
1. get請求發送數據,后端用類接收
- get請求發送了4個參數
request.get("/admin/list",{params:{currentPage:1,pageSize:10,username:"zhangsan",name:"張三",}})
- controller接收
public class AdminController {@GetMapping("/list")public Result<PageResult> getAdminList(// 參數按順序接收,這里設置了默認值@RequestParam(defaultValue = "1") Integer currentPage,@RequestParam(defaultValue = "10") Integer pageSize,// 第3個和第4個參數賦值給了admin類對象Admin admin) {PageInfo<Admin> adminList = adminService.getAdminList(currentPage, pageSize);return PageResult.ok(adminList);}
}
2. Post請求中@RequestParam和@RequestBody 一起使用
import axios from 'axios';
const baseUrl = 'http://localhost:8080';
const sendPostRequest = async () => {try {const response = await axios.post(`/user`, {// 請求體參數userInfo: {name: 'John Doe',age: 30}}, {// 查詢參數params: {id: 123}});console.log('請求成功', response.data);} catch (error) {console.error('請求失敗', error);}
};sendPostRequest();
@PostMapping("/user")
public String saveUser(@RequestParam("id") Long id,@RequestBody UserInfo userInfo) {// 保存用戶邏輯return "User saved successfully.";
}