概要
@ResponseBody是 Spring MVC 中的一個重要注解,用于指示方法的返回值應該直接作為 HTTP 響應體返回,而不是解析為視圖名稱。
基本功能
@ResponseBody主要用于
- 將Java對象轉換為HTTP響應體(通常是JSON或XML)
- 繞過視圖解析器直接返回數據
- 構建RESTful API
使用方式
方法級別
@GetMapping("/user/{id}")
@ResponseBody
public User getUser(@PathVariable Long id) {return userService.findById(id); // 直接返回User對象,自動轉換為JSON
}
類級別(結合@Controller)
@Controller
@ResponseBody
@RequestMapping("/api/users")
public class UserApiController {// 所有方法都自動使用@ResponseBody
}
更簡潔的@RestController
Spring4.0引入了@RestController,它組合了@Controller和@ResponseBody:
@RestController // 等同于 @Controller + @ResponseBody
@RequestMapping("/api/users")
public class UserApiController {// 所有方法都自動使用@ResponseBody
}
工作原理
- 當方法標注@ResponseBody時:
- Spring會使用HttpMessageConverter將返回值轉換為指定格式
- 默認情況下,如果類路徑有Jackson庫,會轉換為JSON
- 轉換過程:
Java對象 → HttpMessageConverter → HTTP響應體(JSON/XML等)
常見用途
返回JSON數據:
@GetMapping("/orders")
@ResponseBody
public List<Order> getOrders() {return orderService.findAll();
}
返回簡單字符串:
@GetMapping("/status")
@ResponseBody
public String getStatus() {return "OK";
}
自定義相應內容類型:
@GetMapping(value = "/xml", produces = MediaType.APPLICATION_XML_VALUE)
@ResponseBody
public User getXmlUser() {return new User("John", "Doe");
}
相關注解
注解 | 說明 |
---|---|
@RequestBody | 將HTTP請求體轉換為Java對象 |
@RestController | 組合了@Controller和@ResponseBody |
@ResponseStatus | 指定HTTP響應狀態碼 |