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响应状态码
相关推荐
橙淮5 分钟前
并发编程(六)
java·jvm
拽着尾巴的鱼儿10 分钟前
springboot openfeign 自定义feign 接口重试机制
java·spring boot·后端
白露与泡影16 分钟前
2026大厂Java面试题大全!牛客网最新版
java·开发语言
凯瑟琳.奥古斯特18 分钟前
高阶子查询题目精炼
开发语言·数据库·python·职场和发展·数据库开发
雪度娃娃36 分钟前
转向现代C++——在意为改写的函数添加 override
开发语言·c++
EntyIU1 小时前
JVM内存与GC笔记
java·jvm·笔记
XS0301061 小时前
并发编程 六
java·后端
yaoxin5211231 小时前
419. 现代 Java IO 最佳实践 - 写入文本文件
java·windows·python
雪宫街道2 小时前
synchronized 锁的范围:对象锁、类锁与代码块锁
java·jvm·后端·面试
x***r1512 小时前
linux安装 jdk-8u291-linux-x64.tar.gz 详细步骤(解压配置环境变量)
java