当前位置: 首页 > news >正文

SpringMVC @ResponseBody注解详解

概要

@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
}

工作原理

  1. 当方法标注@ResponseBody时:
    1. Spring会使用HttpMessageConverter将返回值转换为指定格式
    2. 默认情况下,如果类路径有Jackson库,会转换为JSON
  2. 转换过程:

    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响应状态码
http://www.dtcms.com/a/285026.html

相关文章:

  • Postman接口测试实现UI自动化测试
  • 巧用 Golang 函数特性实现单元测试中的数据库操作 Mock
  • 使用Jmeter进行http接口性能测试
  • 可获得的最大点数
  • https与DNS的运行流程
  • 在ubuntu系统上搭建svn服务器的做法
  • 【分治思想解题框架】【分解、求解、合并】
  • 用图片生成高保真3D模型!Hi3DGen以法线为桥,为高清三维几何生成另辟蹊径
  • 记录timesfm2.0复现及调优
  • CAD model dataset 下载
  • 云徙科技----一面(全栈开发)
  • 学生信息管理案例
  • Linux操作系统之线程:线程概念
  • 常用API
  • 通过nginx 解决跨域问题
  • Selector的用法
  • 现在遇到一个问题 要使用jmeter进行压测 jmeter中存在jar包 我们还要使用linux进行发压,这个jar包怎么设计使用
  • 《错误记录》java: 警告: 源发行版 17 需要目标发行版 17
  • C++11新特性(上)——右值引用,移动语义,引用折叠,完美转发,初始化列表,可变参数模版,lambda,包装器
  • 通过轮询方式使用LoRa DTU有什么缺点?
  • CMake综合学习2: 构建高效可靠的C++中型服务项目以及现代CMake全链条指南
  • 【CodeTop】每日练习 2025.7.17
  • 面试Redis篇-深入理解Redis缓存雪崩
  • 关于vector中的erase的强调
  • 从一到无穷大 #48:Vector Bucket,S3如何把向量玩成新范式?
  • imx6ull-系统移植篇9——bootz启动 Linux 内核
  • Spark 之 HashJoin
  • Langchain和Faiss搭建本地知识库对比
  • python东方财富api股票数据获取程序
  • Vue3从入门到精通