Spring MVC 中使用 RESTful 風格 URL(如 /users/{id})時,僅能接收單個路徑變量或請求參數。嘗試直接傳遞對象(JSON)給帶 @PathVariable 的方法,發現對象字段無法注入。
@PathVariable 僅綁定 URL 路徑佔位符,不支援對象綁定。@RequestParam 僅綁定查詢字串/表單字段,不支援 JSON 體。POST /api/users
Content-Type: application/json
{
"username": "zhangsan",
"email": "zhang@example.com",
"age": 25
}
@PostMapping("/api/users")
public ResponseEntity<User> createUser(@RequestBody User user) {
// user 對象已自動反序列化,字段全部注入
User saved = userService.save(user);
return ResponseEntity.ok(saved);
}
@RequestBody:告訴 Spring 將 HTTP 請求體(JSON/XML)反序列化為方法參數對象。需類路徑下有 Jackson/Gson 等 HttpMessageConverter(Spring Boot 默認已配置)。@Valid / @Validated:配合 JSR-303 註解(@NotNull, @Size 等)進行參數校驗。| 操作 | HTTP 方法 | URL 範例 | 參數方式 |
|---|---|---|---|
| 創建 | POST | /api/users | @RequestBody User |
| 查詢單個 | GET | /api/users/{id} | @PathVariable Long id |
| 查詢列表 | GET | /api/users | @RequestParam(可選) 分頁/篩選參數 |
| 更新 | PUT/PATCH | /api/users/{id} | @PathVariable id + @RequestBody User |
| 刪除 | DELETE | /api/users/{id} | @PathVariable id |
若前端為傳統表單提交,去掉 @RequestBody,直接用對象參數,Spring 會自動按名稱綁定表單字段:
@PostMapping("/api/users/form")
public String createUserForm(User user) { ... } // 表單字段名需與 User 屬性名一致
@RequestBody(HTTP 規範),查詢對象請用 @RequestParam 或 @ModelAttribute。@JsonFormat(pattern="yyyy-MM-dd") 或全局 ObjectMapper 日期格式。MultipartFile,而非對象字段。Spring MVC RESTful 風格傳對象:POST/PUT 請求 + @RequestBody + JSON 體。路徑變量僅用於資源標識(ID),請求體承載完整對象數據,符合 REST 語義且框架原生支援。