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响应状态码
相关推荐
山甫aa3 分钟前
日志技术 Logback + Slf4j —— 从零开始的 Web 后端学习
java·后端·学习·web·logback
韶博雅6 分钟前
开启补充日志
java·开发语言·sql
FYKJ_201015 分钟前
django学习成绩预警系统10905
java·javascript·spring boot·python·spark·django·php
卓怡学长24 分钟前
w192基于springboot教务管理系统
java·数据库·spring boot·spring·maven·intellij-idea
逸Y 仙X28 分钟前
Spark SQL
java·大数据·sql·spark
码农颜29 分钟前
6.4.1 监听连接
java·数据库·mysql
mldong30 分钟前
会签三兄弟:并行/串行/按比例的实现与取舍
java·架构
被怪兽吃掉了30 分钟前
5.2.1一维组数定义方式
开发语言·c++·算法
TheBestRucy39 分钟前
Python 九阳神功之肆:网络编程 · Socket 从入门到实战
开发语言·网络·python
j7~42 分钟前
【C++】《C++二叉搜索树(BST)从入门到精通:概念、实现与Key/Value模型全解析》
开发语言·c++·学习·二叉搜索树