@ResponseBody

news/2024/4/19 1:00:43

目录

概述

用途

使用案例

用 @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.ppmy.cn/news/1344092.html

相关文章

SpringBoot:配置相关知识点

SpringBoot:多环境配置 配置知识点demo:点击查看LearnSpringBoot02 点击查看更多的SpringBoot教程 一、SpringBootApplication SpringBootApplication 来标注一个主程序类,说明这是一个Spring Boot应用,运行这个类的main方法来…

算法学习——华为机考题库7(HJ41 - HJ45)

算法学习——华为机考题库7(HJ41 - HJ45) HJ41 称砝码 描述 现有n种砝码,重量互不相等,分别为 m1,m2,m3…mn ; 每种砝码对应的数量为 x1,x2,x3…xn 。现在要用这些砝码去称物体的重量(放在同一侧),问能称…

Deepin系统安装x11vnc远程桌面工具实现无公网ip访问本地桌面

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 x11vnc是一种在Linux系统中实现远程桌面控制的工具,它的原理是通过X Window系统的协议来实现远程桌面的展…

Redis面试题42

人工智能对工作岗位和就业市场会有什么影响? 答:人工智能对工作岗位和就业市场将带来深远的影响。虽然一些工作可能会被自动化取代,但同时也将出现新的工作机会。以下是人工智能对工作岗位和就业市场的一些影响: 自动化工作&…

k8s版本升级到1.24.x

每个版本升级都有对应的文档,以1.23升级到1.24为例。 1.24.6版本后,k8s不再依赖于docker。需要先切换到使用containerd。 可以查看栏目的k8s安装文档。 确定要升级到哪个版本 使用操作系统的包管理器找到最新的补丁版本 Kubernetes 1.24: yum list --showduplicates kub…

ReactNative实现宽度变化实现的动画效果

效果如上图所示,通过修改设备宽度实现动画效果 import React, {useRef, useEffect, useState} from react; import {Animated, Text, View, Image} from react-native;const FadeInView props > {const fadeAnim useRef(new Animated.Value(0)).current;React…

双向链表的插入、删除、按位置增删改查、栈和队列区别、什么是内存泄漏

2024年2月4日 1.请编程实现双向链表的头插&#xff0c;头删、尾插、尾删 头文件&#xff1a; #ifndef __HEAD_H__ #define __HEAD_H__ #include<stdio.h> #include<stdlib.h> #include<string.h> typedef int datatype; enum{FALSE-1,SUCCSE}; typedef str…

网络攻防中黑客藏用攻击手段:SSRF服务器端请求伪造,SSRF漏洞绕过IP限制,SSRF漏洞挖掘经验

网络攻防中黑客藏用攻击手段:SSRF服务器端请求伪造,SSRF漏洞绕过IP限制,SSRF漏洞挖掘经验。 SSRF(服务端请求伪造):是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。 一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它…

XML传参方式

export function groupLoginAPI(xmlData) {return http.post(/tis/group/1.0/login, xmlData, {headers: {Content-Type: application/xml,X-Requested-With: AAServer/4.0,}}) }import {groupLoginAPI} from "../api/user"; function (e) { //xml格式传参let groupX…

关于windows安装路径没有访问权限的问题

在pip升级的时候出现路径没有访问权限的问题&#xff0c;如下&#xff1a; 手动去对照路径&#xff0c;打开权限&#xff0c;比如&#xff1a; 针对特定用户开放权限即可。 再次升级就能正常成功了&#xff1a;

鸿蒙应用/元服务开发-窗口(Stage模型)设置悬浮窗

一、设置悬浮窗说明 悬浮窗可以在已有的任务基础上&#xff0c;创建一个始终在前台显示的窗口。即使创建悬浮窗的任务退至后台&#xff0c;悬浮窗仍然可以在前台显示。通常悬浮窗位于所有应用窗口之上&#xff1b;开发者可以创建悬浮窗&#xff0c;并对悬浮窗进行属性设置等操…

api接口是什么意思,api接口该如何防护呢?

API接口&#xff1a;应用程序与服务之间的接口 什么是API接口 API是应用程序接口的缩写&#xff0c;指的是能够让不同的应用程序之间交换数据的一种方式。一个API接口就是应用程序与服务之间的接口&#xff0c;它定义了服务提供的功能和数据&#xff0c;以及应用程序如何访问这…

annaconda如何切换当前python环境

annaconda默认的python环境是base&#xff1a; 把各种项目的依赖都安装到base环境中不是一个好的习惯&#xff0c;比如说我们做爬虫项目和做自动化测试项目等所需要的依赖是不一样的&#xff0c;我们可以将为每个项目创建自己的环境&#xff0c;在各自的环境中安装自己的依赖&…

GNU C和标准C

要理解GNU C和标准C的区别&#xff0c;我们需要先了解C语言的标准化过程以及GNU项目。 标准C&#xff1a; C语言最初由Dennis Ritchie在1973年设计并实现。随着其流行度的增加&#xff0c;为了保证不同编译器之间的可移植性和一致性&#xff0c;美国国家标准局&#xff08;Ame…

第4节、电机多段转动【51单片机+L298N步进电机系列教程】

↑↑↑点击上方【目录】&#xff0c;查看本系列全部文章 摘要&#xff1a;本节介绍用控制步进电机三个主要参数角度、速度、方向&#xff0c;实现简单的步进电机多段控制 一、目标功能 输入多个目标角度&#xff0c;以及每个角度对应的速度&#xff0c;实现步进电机的多段多速…

实践:微服务版本升级步骤以及maven仓库相关概念

进行微服务开发的时候&#xff0c;上层服务依赖于下层的服务的api&#xff0c;比如适配属于上层服务&#xff0c;用户属于下层服务。 例子: 上层服务 <!--订单管理微服务api依赖--> <dependency><groupId>com.jn.server</groupId><artifactId>…

查询一个Java实现类实现了哪个接口

要查询一个Java实现类实现了哪个接口&#xff0c;可以使用反射机制。具体步骤如下&#xff1a; 获取该类的Class对象&#xff1b; 调用Class对象的getInterfaces()方法&#xff0c;返回该类实现的所有接口的Class数组&#xff1b; 遍历Class数组&#xff0c;输出每个接口的名…

Spring Boot整合MyBatis Plus实现基本CRUD与高级功能

文章目录 1. 引言2. 项目搭建与依赖配置2.1 添加MyBatis Plus依赖2.2 配置数据源与MyBatis Plus 3. 实现基本CRUD功能3.1 创建实体类3.2 创建Mapper接口3.3 实现Service层3.4 控制器实现 4. 高级功能实现4.1 自动填充功能4.2 乐观锁功能4.3 逻辑删除功能 5. 拓展&#xff1a;My…

阅读笔记——《RapidFuzz: Accelerating fuzzing via Generative Adversarial Networks》

【参考文献】Ye A, Wang L, Zhao L, et al. Rapidfuzz: Accelerating fuzzing via generative adversarial networks[J]. Neurocomputing, 2021, 460: 195-204.【注】本文仅为作者个人学习笔记&#xff0c;如有冒犯&#xff0c;请联系作者删除。 目录 摘要 一、介绍 二、相关…

【【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏(附项目源码)

最终效果 文章目录 最终效果前言导入AI导航系统导航烘培添加羊添加捕食者动画控制随着地面法线旋转在地形上随机生成动物不同部位颜色不同最终效果源码完结前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第24篇中,…