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响应状态码
相关推荐
布朗克1681 小时前
Java 10 新特性及具体应用
java·开发语言·新特性·java10
ZZHow10244 小时前
JavaWeb开发_Day05
java·笔记·web
CHEN5_024 小时前
【Java虚拟机】垃圾回收机制
java·开发语言·jvm
Warren984 小时前
Lua 脚本在 Redis 中的应用
java·前端·网络·vue.js·redis·junit·lua
HalvmånEver4 小时前
在 C++ :x86(32 位)和 x64(64 位)的不同
开发语言·c++·学习
amy_jork6 小时前
npm删除包
开发语言·javascript·ecmascript
浪成电火花7 小时前
(deepseek!)deepspeed中C++关联部分
开发语言·c++
茉莉玫瑰花茶7 小时前
Qt 常用控件 - 9
开发语言·qt
艾伦~耶格尔8 小时前
【数据结构进阶】
java·开发语言·数据结构·学习·面试
杜子不疼.8 小时前
《Python列表和元组:从入门到花式操作指南》
开发语言·python