@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.mzph.cn/news/671220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外汇天眼:欧洲期货交易所(Eurex)推出了基于EURO STOXX 50指数股息期货的中期期权

欧洲期货交易所(Eurex)将于2024年2月5日推出基于EURO STOXX 50指数股息期货的中期期权,扩大了其股息衍生品的产品线。 目前作为场外交易产品的中期期权(Mid-Curve Options)现在可以在Eurex进行交易。 中期期权&#x…

使用 openpyxl 操作 Excel

由于单位有任务,需要按照名册制作多个工作表。手动复制和修改内容太费事了,所以使用python完成此项工作,为之后的此类工作提供一个通用脚本。 安装依赖库 pip install openpyxl lxml我们需要用到openpyxl。在官方文档中提到,如果…

摘录笔记——2024年2月5日

美团三年,总结的10条血泪教训在美团的三年多时光,如同一部悠长的交响曲,高高低低,而今离开已有一段时间。闲暇之余,梳理了三年多的收获与感慨,既是对过去一段时光的的一个深情回眸,也是对未来之…

「牵手」联合国,看这家企业如何推动厕所可持续发展

作者 | 叶蓁 来源 | 洞见新研社 “没有人是一座孤岛,每个人都是广袤大陆的一部分。”英国诗人的这句话,用来形容当下的消费市场再准确不过。 当前,正是国家增强经济活力、发展内生动力的关键时期。2023年,我国全年GDP增速5.2%&…

Linux-3进程概念(一)

1.冯诺伊曼结构 1.1 冯诺依曼结构的概念 冯诺依曼结构,又称为普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的宽度相同&…

Django连接Mysql

修改setting.py配置文件 连接前,需要创建数据库 安装mysql客户端 因为连接需要一个客户端,而python没有客户端,所以就需要一个客户端来接收你填写的参数 pip install mysqlclient

【Java程序设计】【C00246】基于Springboot的留守儿童爱心网站(有论文)

基于Springboot的留守儿童爱心网站(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的留守儿童爱心网站 本系统分为系统功能模块、管理员功能模块以及用户功能模块。 系统功能模块:系统首页的主要功能展…

为什么(如何)从 Java 8/11 迁移到 Java 21,从 Spring Boot 2 迁移到最新的 Spring Boot 3.2 ?

介绍 如果您的工作配置与 Java 有一定的关系,您一定已经注意到 了Java 最新稳定版本 Java 21 引起了很多关注。 这个新版本引入了一些未来的功能,改进了之前引入/孵化的一些突破性功能,弃用了多余的功能,并删除了一些错误。它使…

CTF-WEB进阶与学习

PHP弱类型 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较 在进行比较的时候,会先将字符串类型转化成相同,再比较 如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值 并且…

c语言游戏实战(3):三子棋

前言: 三子棋是一种民间传统游戏,又叫九宫棋、圈圈叉叉棋、一条龙、井字棋等。游戏规则是双方对战,双方依次在9宫格棋盘上摆放棋子,率先将自己的三个棋子走成一条线就视为胜利。但因棋盘太小,三子棋在很多时候会出现和…

人工智能|深度学习——基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统

代码下载: 基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统.zip资源-CSDN文库 1.研究的背景 水下场景目标检测是水下机器人、水下无人机和水下监控等领域中的重要任务之一。然而,由于水下环境的复杂性和特殊性,水下目标检测面临着许多挑…

计算机网络——新型网络架构:SDN/NFV

1. 传统节点与SDN节点 1.1 传统节点(Traditional Node) 这幅图展示了传统网络节点的结构。在这种设置中,控制层和数据层是集成在同一个设备内。 以太网交换机:在传统网络中,交换机包括控制层和数据层,它不仅负责数据包的传输&…

编译spring原码

1.下载原码 spring原码下载地址链接: github地址 最好选择一个release版本,毕竟发布版稳定,上述连接指向的是5.2.0 release 2.配置gradle 由于spring源码是用gradle管理的。为了能顺利得下载项目所需的jar包,因此要先配置一下gradle&#xff…

docker安装zpan

安装 1.创建数据库 docker run -di --namezpan_mysql -p 3309:3306 -e MYSQL_ROOT_PASSWORD123456 mysql 2.手动新建数据库zpan 3.创建目录 mkdir -p /opt/zpan cd /opt/zpan 4.编写配置文件 vim config.yml #详细配置文档可参考: https://zpan.space/#/zh…

机器学习之DeepSequence软件使用学习1

简介 DeepSequence 是一个生成性的、无监督的生物序列潜变量模型。给定一个多重序列比对作为输入,它可以用来预测可获得的突变,提取监督式学习的定量特征,并生成满足明显约束的新序列文库。它将序列中的高阶依赖性建模为残差子集之间约束的非…

2024/2/6学习记录

ts 因为已经学习过了 js ,下面的都是挑了一些 ts 与 js 不同的地方来记录。 安装 npm install -g typescript 安装好之后,可以看看自己的版本 ts基础语法 模块 函数 变量 语法和表达式 注释 编译 ts 文件需要用 tsc xxx.ts ,js 文件…

《计算机网络简易速速上手小册》第8章:软件定义网络(SDN)与网络功能虚拟化(NFV)(2024 最新版)

第8章:软件定义网络(SDN)与网络功能虚拟化(NFV) 文章目录 8.1 SDN 架构与原理 - 智能网络的构建积木8.1.1 基础知识8.1.2 重点案例:使用 Python 控制 OpenFlow 交换机准备工作Python 脚本示例 8.1.3 拓展案…

C++ STL精通之旅:向量、集合与映射等容器详解

目录 常用容器 顺序容器 向量vector 构造 尾接 & 尾删 中括号运算符 获取长度 清空 判空 改变长度 提前分配好空间 代码演示 运行结果 关联容器 集合set 构造 遍历 其他 代码演示 运行结果​编辑 映射map 常用方法 构造 遍历 其他 代码演示1​编…

【VSTO开发-WPS】下调试

重点2步: 1、注册表添加 Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\kingsoft\Office\WPP\AddinsWL] "项目名称"""2、visual studio 运行后,要选中附加到调试,并指定启动项目。 如PPT输入WPP搜…

Java锁到底是个什么东西

一、java锁存在的必要性 要认识java锁,就必须对2个前置概念有一个深刻的理解:多线程和共享资源。 对于程序来说,数据就是资源。 在单个线程操作数据时,或快或慢不存在什么问题,一个人你爱干什么干什么。 多个线程操…