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

@ResponseBody

目录

概述

用途

使用案例

用 @ResponseBody 设置返回值


概述

  • @ResponseBody注解的作用是将方法返回的对象,通过适当的转换器(HttpMessageConverter)转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据

用途

本质:

  • @ResponseBody的作用其实是将java对象转为json格式的数据,然后直接写入HTTP response的body中;一般在异步获取数据时使用

注意:

  • 在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据
  • @ResponseBody 是作用在方法上的
  • @ResponseBody 表示该方法的返回结果直接写入 HTTP response body中,一般在异步获取数据时使用(也就是AJAX)
  • 在使用 @RequestMapping 后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中
  • 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据

使用案例

  • 登录小案例分析
  • 比如我要在登陆的时候跳转到一个“success.html”页面,当你加上@ResponseBody注解后,代码在执行的时候,它就不会给你解析成跳转路径,它会给你返回success字符串

success.html


Controller:


运行结果:


当你不加@ResponseBody的时候,代码在执行的时候,它就会给你解析成跳转路径进行对应的跳转


运行结果:

  • @ResponseBody也是可以直接作用在类上的,最典型的例子就是 @RestController 这个注解(它无非是用 @Controller 和 @ResponseBody 标记的元注解),它就包含了 @ResponseBody 这个注解
  • 在类上用@RestController,其内的所有方法都会默认加上@ResponseBody,也就是默认返回JSON格式;如果某些方法不是返回JSON的,就只能用@Controller了,这也是它们俩的区别

用 @ResponseBody 设置返回值

(1)用HttpServletResponse返回内容

  • 即使将返回值设置为void,仍然可以通过添加HttpServletResponse作为参数直接写入响应内容

  • 其行为本身与返回值为 String 时相同,但这种写法也可以用于下载文件,稍后会介绍

(2)指定内容类型

  • 内容类型可以在 @RequestMapping 的 Produces 属性中指定
  • 内容类型常量在 org.springframework.http.MediaType 类中定义,所以使用它们来指定类型


(3)指定HTTP状态和响应头

  • 如果要指定除 HTTP 状态或内容类型之外的响应标头,请将返回值设置为 ResponseEntity
  • ResponseEntity 是一个具有主体、标头和状态的类,类型 T 指定主体的类型


(4)返回JSON

  • 返回JSON时,返回值可以是任意类
  • 通过这样做,Spring Boot 将使用名为 Jackson 的 JSON 处理库将其转换为 JSON 格式
  • 例如,如果创建一个User类,其中包含String类型的成员变量id和name,并返回它们的列表,则可以编写如下方法:

  • 此方法生成类似于以下内容的 JSON 数据:


(5)下载文件

  • 要下载文件,您可以使用 HttpServletResponse,如下所示:

  • 另一种选择是使用 org.springframework.core.io.Resource 作为返回值
  • 这会自动设置Content-Length,这样你就可以写得更简洁


http://www.kler.cn/a/228770.html

相关文章:

  • ComfyUI 矩阵测试指南:用三种方法,速优项目效果
  • 【2024年华为OD机试】 (B卷,100分)- 路灯照明问题(Java JS PythonC/C++)
  • Wi-Fi 7、Wi-Fi 6 与 5G、4G 的全方位对比
  • HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (四、最近上映电影滚动展示及加载更多的实现)
  • protobuf: 通讯录3.1
  • 6、原来可以这样理解C语言_函数(1/8)函数的概念
  • idea中找到所有的TODO
  • 【计算机网络】物理层概述|通信基础|奈氏准则|香农定理|信道复用技术
  • 使用PHPStudy搭建本地web网站并实现任意浏览器公网访问
  • 第八届:世界3D渲染挑战赛《无尽阶梯》正式开启
  • QT 的 blockSignals(true) 的作用范围
  • error: failed to push some refs to....
  • 基于Vue2用keydown、setTimeout事件实现连续按键(连击)任意键(或组合键)3秒触发自定义事件(以F1键为例)
  • 分享62个节日PPT,总有一款适合您
  • 2024最新最详细【接口测试总结】
  • 2024年第一篇博客
  • 【npm】安装全局包,使用时提示:不是内部或外部命令,也不是可运行的程序或批处理文件
  • 构造回文数组
  • thinkphp6入门(16)-- 缓存cache用法总结
  • React 中实现拖拽功能-插件 react-beautiful-dnd
  • MYSQL——MySQL8.3无法启动
  • 路由引入路由过滤
  • 读论文:DiffBIR: Towards Blind Image Restoration with Generative Diffusion Prior
  • 【Django-ninja】使用schema
  • 代码随想录算法训练营第二十二天|216.组合总和III,17.电话号码的字母组合
  • ReactNative实现的横向滑动条