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

相关推荐

  1. 定制@ResponseBody

    2024-02-06 06:10:03       45 阅读
  2. 注解 - @ResponseBody

    2024-02-06 06:10:03       30 阅读
  3. @ResponseBody和@RequestBody

    2024-02-06 06:10:03       44 阅读
  4. Spring注解@ResponseBody的作用与应用场景

    2024-02-06 06:10:03       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-06 06:10:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-06 06:10:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-02-06 06:10:03       87 阅读
  4. Python语言-面向对象

    2024-02-06 06:10:03       96 阅读

热门阅读

  1. RabbitMQ:分布式系统中的高效消息队列

    2024-02-06 06:10:03       49 阅读
  2. 搭建kafka测试环境

    2024-02-06 06:10:03       52 阅读
  3. 软件漏洞概念与原理

    2024-02-06 06:10:03       46 阅读
  4. C语言冒泡排序介绍

    2024-02-06 06:10:03       45 阅读
  5. Matlab建立TCP/IP链接

    2024-02-06 06:10:03       51 阅读
  6. C语言-4

    C语言-4

    2024-02-06 06:10:03      43 阅读
  7. Days 22 ElfBoard 基于QT的智慧家庭控制中心

    2024-02-06 06:10:03       44 阅读
  8. 服务器托管有哪些好处?

    2024-02-06 06:10:03       45 阅读
  9. SpringBoot过滤器获取请求的参数

    2024-02-06 06:10:03       56 阅读