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

@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,这样你就可以写得更简洁

相关文章:

  • 创建TextMeshPro字体文件
  • jvm几个常见面试题整理
  • 三网码支付系统源码,三网免挂有PC软件,有云端源码,附带系统搭建教程
  • SpringBoot 过滤器Filter 拦截请求 生命周期
  • Scala 和 Java在继承机制方面的区别
  • 【Java万花筒】数据的安全钥匙:Java的加密与保护方法
  • 幻方(Magic Square)
  • 神经网络基本原理
  • 2024年Java架构篇之设计模式
  • Java实现婚恋交友网站 JAVA+Vue+SpringBoot+MySQL
  • BlueLotus 下载安装使用
  • docker部署docker运维工具
  • SpringBoot 事务管理Transactional 数据回滚 数据一致性
  • 已经设置密码的情况下连接不上linux下redis服务的,解决办法
  • 高速接口PCB布局指南(五)高速差分信号布线(三)
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Angularjs之国际化
  • Apache的基本使用
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • DataBase in Android
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • javascript 哈希表
  • Node项目之评分系统(二)- 数据库设计
  • Theano - 导数
  • Vue2 SSR 的优化之旅
  • Vultr 教程目录
  • 阿里云应用高可用服务公测发布
  • 从零开始在ubuntu上搭建node开发环境
  • 对超线程几个不同角度的解释
  • 关于Java中分层中遇到的一些问题
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 前言-如何学习区块链
  • 嵌入式文件系统
  • 收藏好这篇,别再只说“数据劫持”了
  • 小程序开发中的那些坑
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • AI算硅基生命吗,为什么?
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 阿里云服务器购买完整流程
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • !!java web学习笔记(一到五)
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • ###项目技术发展史
  • #控制台大学课堂点名问题_课堂随机点名
  • $.ajax,axios,fetch三种ajax请求的区别
  • (3)nginx 配置(nginx.conf)
  • (编译到47%失败)to be deleted
  • (规划)24届春招和25届暑假实习路线准备规划
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (简单) HDU 2612 Find a way,BFS。
  • (三)mysql_MYSQL(三)
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)UDP基本编程步骤