SpringMVC @ResponseBody注解详解

概要

@ResponseBody是 Spring MVC 中的一个重要注解,用于指示方法的返回值应该直接作为 HTTP 响应体返回,而不是解析为视图名称。

基本功能

@ResponseBody主要用于

  • 将Java对象转换为HTTP响应体(通常是JSON或XML)
  • 绕过视图解析器直接返回数据
  • 构建RESTful API

使用方式

方法级别

java 复制代码
@GetMapping("/user/{id}")
@ResponseBody
public User getUser(@PathVariable Long id) {
    return userService.findById(id); // 直接返回User对象,自动转换为JSON
}

类级别(结合@Controller)

java 复制代码
@Controller
@ResponseBody
@RequestMapping("/api/users")
public class UserApiController {
    // 所有方法都自动使用@ResponseBody
}

更简洁的@RestController

Spring4.0引入了@RestController,它组合了@Controller和@ResponseBody:

java 复制代码
@RestController // 等同于 @Controller + @ResponseBody
@RequestMapping("/api/users")
public class UserApiController {
    // 所有方法都自动使用@ResponseBody
}

工作原理

  1. 当方法标注@ResponseBody时:
    1. Spring会使用HttpMessageConverter将返回值转换为指定格式
    2. 默认情况下,如果类路径有Jackson库,会转换为JSON
  2. 转换过程: Java对象 → HttpMessageConverter → HTTP响应体(JSON/XML等)

常见用途

返回JSON数据:

java 复制代码
@GetMapping("/orders")
@ResponseBody
public List<Order> getOrders() {
    return orderService.findAll();
}

返回简单字符串:

java 复制代码
@GetMapping("/status")
@ResponseBody
public String getStatus() {
    return "OK";
}

自定义相应内容类型:

java 复制代码
@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响应状态码
相关推荐
老毛肚3 分钟前
手写mybatis
java·数据库·mybatis
两点王爷6 分钟前
Java基础面试题——【Java语言特性】
java·开发语言
choke23310 分钟前
[特殊字符] Python 文件与路径操作
java·前端·javascript
Swift社区14 分钟前
Gunicorn 与 Uvicorn 部署 Python 后端详解
开发语言·python·gunicorn
choke23315 分钟前
Python 基础语法精讲:数据类型、运算符与输入输出
java·linux·服务器
码农阿豪26 分钟前
Python Flask应用中文件处理与异常处理的实践指南
开发语言·python·flask
岁岁种桃花儿26 分钟前
CentOS7 彻底卸载所有JDK/JRE + 重新安装JDK8(实操完整版,解决kafka/jps报错)
java·开发语言·kafka
csbysj202038 分钟前
AngularJS 模块
开发语言
独好紫罗兰1 小时前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python
wuhen_n1 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构