SpringBoot接口獲取參數(shù)的常用注解詳解
SpringBoot 接口獲取參數(shù)的注解非常豐富,下面詳細介紹一下常用的參數(shù)注解:
1、URL 路徑參數(shù)
@PathVariable
獲取 URL 路徑中的參數(shù)
// 獲取單個參數(shù)
@GetMapping("/user/{id}")
public User getUserById(@PathVariable Long id) {
return userService.findById(id);
}
// 獲取多個參數(shù)
@GetMapping("/user/{id}/post/{postId}")
public String getInfo(
@PathVariable Long id,
@PathVariable Long postId
) {
// ...
}
// 參數(shù)名不一致時指定
@GetMapping("/user/{userId}")
public User getUser(@PathVariable("userId") Long id) {
return userService.findById(id);
}
// 獲取所有路徑變量(Map形式)
@GetMapping("/user/{id}/post/{postId}")
public String getInfo(@PathVariable Map<String, String> pathVariables) {
return pathVariables.get("id");
}
// URL路徑中的時間參數(shù)
@GetMapping("/events/date/{date}")
public List<Event> getEventsByPathDate(
@PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {
return eventService.findByDate(date);
}
@GetMapping("/events/datetime/{datetime}")
public String getByDateTime(
@PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime datetime) {
return "時間: " + datetime;
}
2. 查詢參數(shù)(URL 參數(shù))
@RequestParam
獲取 URL 查詢字符串參數(shù)
// 必填參數(shù)
@GetMapping("/users")
public List<User> getUsers(@RequestParam String name) {
return userService.findByName(name);
}
// 可選參數(shù)
@GetMapping("/users")
public List<User> getUsers(
@RequestParam(required = false) String name,
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size
) {
return userService.findByName(name, page, size);
}
// 接收多個值
@GetMapping("/users")
public List<User> getUsers(@RequestParam List<Long> ids) {
return userService.findByIds(ids);
}
// 獲取所有查詢參數(shù)(Map形式)
@GetMapping("/search")
public String search(@RequestParam Map<String, String> params) {
return params.get("keyword");
}
// 查詢參數(shù)中的時間
@GetMapping("/events")
public List<Event> getEventsByDate(
@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date date) {
return eventService.findByDate(date);
}
// 多個時間參數(shù)
@GetMapping("/events/range")
public List<Event> getEventsByRange(
@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date startDate,
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endTime) {
return eventService.findByDateRange(startDate, endTime);
}
3. 請求體參數(shù)
@RequestBody
獲取 JSON/XML 格式的請求體
@PostMapping("/user")
public User createUser(@RequestBody User user) {
return userService.save(user);
}
// 接收 Map 類型的請求體
@PostMapping("/data")
public String processData(@RequestBody Map<String, Object> data) {
return data.toString();
}
// 使用 DTO 接收參數(shù)
@PostMapping("/register")
public ResponseEntity<?> register(@RequestBody RegisterDTO registerDTO) {
// 處理注冊邏輯
return ResponseEntity.ok("注冊成功");
}
@ModelAttribute
獲取表單數(shù)據(jù)(支持 GET/POST)
// 綁定到對象
@PostMapping("/user")
public String createUser(@ModelAttribute User user) {
userService.save(user);
return "success";
}
// 綁定到 Map
@PostMapping("/user")
public String createUser(@ModelAttribute Map<String, Object> model) {
return model.get("name").toString();
}
4. 請求頭參數(shù)
@RequestHeader
獲取 HTTP 請求頭信息
@GetMapping("/info")
public String getInfo(
@RequestHeader("User-Agent") String userAgent,
@RequestHeader(value = "Authorization", required = false) String auth,
@RequestHeader Map<String, String> headers
) {
return "User-Agent: " + userAgent;
}
5. Cookie 參數(shù)
@CookieValue
獲取 Cookie 中的值
@GetMapping("/profile")
public String getProfile(@CookieValue("sessionId") String sessionId) {
return "Session ID: " + sessionId;
}
// 可選參數(shù)
@GetMapping("/profile")
public String getProfile(
@CookieValue(value = "sessionId", defaultValue = "default") String sessionId
) {
return "Session ID: " + sessionId;
}
6. 文件上傳參數(shù)
@RequestPart
獲取文件上傳內(nèi)容
@RequestPart處理 multipart/form-data 請求中的復雜數(shù)據(jù)類型,支持文件上傳和混合表單數(shù)據(jù)(如 JSON + 文件)。
| 特性 | @RequestPart | @RequestParam |
|---|---|---|
| 數(shù)據(jù)格式 | 支持任何內(nèi)容類型(如 JSON、XML) | 僅支持 application/x-www-form-urlencoded |
| 內(nèi)容類型 | 每個部分有獨立的 Content-Type | 整個請求統(tǒng)一的 Content-Type |
| 數(shù)據(jù)處理 | 使用 HttpMessageConverter | 使用 Servlet API 的參數(shù)解析 |
| 文件處理 | 天然支持文件上傳,支持其他類型 | 僅支持文件(作為 MultipartFile) |
| JSON 綁定 | 直接綁定到對象 | 不支持 |
| 主要應用場景 | 上傳文件同時發(fā)送 JSON 數(shù)據(jù):如用戶上傳頭像并附帶用戶信息(JSON)。 單個請求中混合不同類型的數(shù)據(jù):如同時上傳多個文件和表單數(shù)據(jù)。 REST API 中的文件上傳:如上傳圖片并附帶元數(shù)據(jù)(JSON)。 |
@RestController
@RequestMapping("/api/upload")
public class UploadController {
// 基礎文件上傳
@PostMapping("/single")
public String uploadSingle(@RequestPart("file") MultipartFile file) {
return "Uploaded: " + file.getOriginalFilename();
}
// 多文件上傳
@PostMapping("/multiple")
public String uploadMultiple(@RequestPart("files") MultipartFile[] files) {
return "Uploaded " + files.length + " files";
}
// 文件 + JSON對象
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String uploadData(@RequestPart("file") MultipartFile file,
@RequestPart("metadata") MyMetadata metadata) {
// metadata 是自定義的 JSON 對象
return "Uploaded file with metadata";
}
// 文件 + 表單字段
@PostMapping(value = "/upload-with-data", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<?> uploadWithData(
@RequestPart("file") MultipartFile file,
@RequestParam("name") String name,
@RequestParam("description") String description) {
// 處理文件和文本數(shù)據(jù)
return ResponseEntity.ok("上傳成功");
}
}
常見錯誤及解決方法:
- 忘記設置 consumes = "multipart/form-data":導致無法解析請求。
- 文件大小超過默認限制:需配置 spring.servlet.multipart.max-file-size 和 spring.servlet.multipart.max-request-size。
與 @RequestBody 的區(qū)別:
- @RequestBody 用于處理 application/json 或 application/xml 格式的請求體數(shù)據(jù)。
- @RequestPart 用于處理 multipart/form-data 中的復雜數(shù)據(jù)類型(如 JSON + 文件)。
@RequestParam
@PostMapping("/upload-simple")
public String uploadSimple(@RequestParam("file") MultipartFile file) {
return "文件名稱: " + file.getOriginalFilename();
}
7. 會話和屬性參數(shù)
@SessionAttribute
獲取會話屬性
@GetMapping("/dashboard")
public String dashboard(@SessionAttribute("user") User user) {
return "歡迎 " + user.getUsername();
}
@RequestAttribute
獲取請求域?qū)傩?/p>
@GetMapping("/process")
public String process(@RequestAttribute("processedData") String data) {
return "處理后的數(shù)據(jù): " + data;
}
8. 其他特殊注解
@MatrixVariable
獲取矩陣變量(不常用)
// URL: /cars;color=red;year=2023
@GetMapping("/cars")
public String getCar(@MatrixVariable String color) {
return color;
}
@Value(從配置獲?。?/strong>
@GetMapping("/config")
public String getConfig(@Value("${app.name}") String appName) {
return "應用名稱: " + appName;
}
到此這篇關于SpringBoot接口獲取參數(shù)的常用注解詳解的文章就介紹到這了,更多相關SpringBoot接口獲取參數(shù)注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java實現(xiàn)讀取鍵盤輸入保存到txt文件,再統(tǒng)計并輸出每個單詞出現(xiàn)次數(shù)的方法
這篇文章主要介紹了Java實現(xiàn)讀取鍵盤輸入保存到txt文件,再統(tǒng)計并輸出每個單詞出現(xiàn)次數(shù)的方法,涉及java文件I/O操作及字符串遍歷、運算實現(xiàn)統(tǒng)計功能相關技巧,需要的朋友可以參考下2017-07-07
Java Lambda 表達式從入門到實戰(zhàn)徹底搞懂函數(shù)式編程
本文詳細介紹了Java 8中的Lambda表達式,包括為什么需要Lambda、Lambda的核心概念、語法詳解、實戰(zhàn)場景、與匿名內(nèi)部類的區(qū)別、優(yōu)缺點以及應用建議,Lambda表達式簡化了代碼編寫,提升了開發(fā)效率,是函數(shù)式編程的重要體現(xiàn),感興趣的朋友跟隨小編一起看看吧2025-12-12
Java中String類(StringBuffer、StringBuilder)相關(最新推薦)
Java中的String類是不可變的,存儲在字符串常量池中,提供了多種方法用于操作字符串,為了提高效率,可以使用StringBuilder或StringBuffer,本文介紹Java中String類(StringBuffer、StringBuilder)相關知識,感興趣的朋友跟隨小編一起看看吧2026-01-01
SpringBoot如何整合Springsecurity實現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制
這篇文章主要給大家介紹了關于SpringBoot如何整合Springsecurity實現(xiàn)數(shù)據(jù)庫登錄及權(quán)限控制的相關資料,文中通過圖文以及實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2022-01-01
java?-jar啟動參數(shù)設置file.encoding編碼,解決中文亂碼的問題
這篇文章主要介紹了java?-jar啟動參數(shù)設置file.encoding編碼,解決中文亂碼的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07

