@ResponseStatus

目录

概述:

用途:

参数:

注意事项:

自定义异常类:

底层原理:


概述:

  • 在 Spring MVC 中,我们有很多方法来设置 HTTP 响应的状态码
  • 其中最直接的方法:使用 @ResponseStatus 注解
  • 它将一个方法或异常类标注一个应返回的HTTP状态码(code())和原因说明(reason())(即将特定的HTTP状态码和原因与一个控制器方法或异常类相关联)

用途:

  • 在方法上使用:当你想要显式声明一个Spring MVC控制器方法完成后应该返回的HTTP状态码时,可以在该方法上使用@ResponseStatus;例如,可以将201 CREATED状态码关联到创建资源的操作上
  • 在异常上使用:你可以创建一种异常,当该异常被抛出时,自动返回指定的HTTP状态码;在异常类上使用@ResponseStatus可以直接将异常映射到HTTP状态响应中

参数:

  • value/code:用于指定HTTP状态码
  • reason:可选参数,用于提供状态码的原因描述;这个描述将被发送到客户端

注意事项:

  • 当处理器方法被调用时,该状态码将被加入到HTTP响应中,但是不会覆盖其他方式所设置的状态信息,例如通过ResponseEntity或"Redirect"设置的信息,因为 ResponseEntity 对象包含了完整的响应信息,会优先使用
  • 警告:在异常类上使用这个注解,或当设置这个注解的reason属性时,将会使用HttpServletResponse.sendError方法
  • 在HttpServletResponse.sendError被使用后,响应被视为已完成,不应该再进行进一步的写入
  • 另外,Servlet容器通常会创建一个HTML错误页面,因此使用reason对于REST API而言是不合适的,因为REST调用通常预期接收JSON或XML格式的响应体
  • 对于这种情况,最好是使用ResponseEntity作为返回类型,并避免使用@ResponseStatus注解
  • 注意:一个控制器类也可以被标注为@ResponseStatus,这样它就会被该类以及其子类中所有使用@RequestMapping和@ExceptionHandler的方法继承,除非这些方法通过本地@ResponseStatus声明进行了覆盖

自定义异常类:

  • 在Spring Boot中,可以通过在自定义的异常类上使用@ResponseStatus注解来设置HTTP状态
  • 当这个异常被抛出时,就会返回设置的状态对应的响应
  • 需要注意的是,必须继承非检查异常(RuntimeException及其子类)

底层原理:

  • 注解底层还是通过设置 response.setStatus 来实现
  • 在@RequestMapping方法执行完成,Spring解析返回值之前,进行了responseStatus设置
  • 代码片段位于:org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod#setResponseStatus
  • this对象指当前的ServletInvocableHandlerMethod,看到@ResponseStatus的reason不为空,就调用response.sendError;reason为空,就调用setStatus方法仅仅设置响应状态码
  • 代码片段位于:org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod#invokeAndHandle
  • 发现如果ServletInvocableHandlerMethod的responseReason有值,也就是@ResponseStatus有reason属性,@RequestMapping方法返回值都不处理了,直接返回
  • 也就是说只要有@ResponseStatus的reason属性标注在处理器Controller类或者方法上,比如响应状态码code设置为404,reason设置为页面没找到,那 tomcat 展示界面是大概这样,展示信息就是我们写的reason属性
  • @ResponseStatus(code=A,reason=B)标注在@RequestMapping方法上,作用效果与response.sendError(A,B)是一样的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727804.shtml

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

相关文章

FolkMQ 作一个简单的消息中间件(最简单的那种)

FolkMQ 打算作一个简单的消息中间件(全球最简单的那种,要比谁都简单!)。追世间简单为何物,可叫我生死相许! 面向简单编程 1) 启动服务 docker run -p 18602:18602 -p 8602:8602 noearorg/folkmq-server:…

K8S之实现业务的蓝绿部署

如何实现蓝绿部署 什么是蓝绿部署?蓝绿部署的优势和缺点优点缺点 通过k8s实现线上业务的蓝绿部署 什么是蓝绿部署? 部署两套系统:一套是正在提供服务系统,标记为 “绿色” ;另一套是准备发布的系统,标记为…

删除指定的数

删除指定的数 题目描述:解法思路:解法代码:运行结果: 题目描述: 先输入10个整数存放在数组中,再输入⼀个整数n,删除数组中所有等于n的数字,数组中剩余的数组保证数组的最前面&#…

向爬虫而生---Redis 探究篇6<Redis的Bigkey问题介绍>

前言: 随着数据规模的增长,Redis的BigKey问题也开始显现。 BigKey问题主要指的是存储了大量数据的key,这可能给Redis的性能和可用性带来负面影响。当一个key的数据量过大时,会占用宝贵的内存资源,拖慢Redis的响应速度。此外,存储和恢复这些BigKey也会变得困难和耗时,增…

SpringBoot项目如何添加全局接口上下文

1. 定义Spring Boot应用的路由 首先,确保您的Spring Boot应用有一个统一的路由前缀。例如,可以在application.properties或application.yml配置文件中使用server.servlet.context-path属性来定义所有请求的基础路径。 # application.properties server…

vue基础教程(4)——深入理解vue项目各目录

博主个人微信小程序已经上线:【中二少年工具箱】。欢迎搜索试用 正文开始 专栏简介1. 总览2. node_modules3.public4.src5.assets6.components7.router8.stores9.views10.App.vue11.main.js12.index.html 专栏简介 本系列文章由浅入深,从基础知识到实战…

docker部署若依项目

目录 目录 一、搭建局域 二、redis安装 1.创建目录 2. redis.conf修改 三、MySQL安装 1. 安装 2. 设置远程连接 3. 创建数据库 四、若依后端项目搭建 1. 切换到家目录 2. 上传jar包 3. 上传Dockerfile文件 4. 构建镜像 5. 运行容器 6. 查看运行情况 7. 测试(自己…

AD20软件使用指南:拼板操作与Gerber文件生成详解

文章目录 一、前言二、拼板1.创建新的PCB,用于放置拼板文件2.放置拼板阵列3.设置阵列信息4.V割拼板,放置工艺边和定位孔和光点5.完成拼板 三、生成Gerber文件1.输出Gerber文件2.选择单位和格式3.选择输出的图层4.生成Gerber文件5.生成钻孔文件 四、上传嘉…

01.AJAX 概念和 axios 使用

01.AJAX 概念和 axios 使用 1. 什么是 AJAX ? 使用浏览器的 XMLHttpRequest 对象 与服务器通信 浏览器网页中,使用 AJAX技术(XHR对象)发起获取省份列表数据的请求,服务器代码响应准备好的省份列表数据给前端,前端拿…

使用Pandas 玩转透视表(pivot_table)

也许大多数人都有在Excel中使用数据透视表的经历,其实Pandas也提供了一个类似的功能,名为 pivot_table。虽然pivot_table非常有用,但是我发现为了格式化输出我所需要的内容,经常需要记住它的使用语法。所以,本文将重点…

腾讯云学生服务器多少钱?怎么申请?

2024年腾讯云学生服务器优惠活动「云校园」,学生服务器优惠价格:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年,CVM云服务器2核4G配置842.4元一年&…

微信小程序(五十一)页面背景(全屏)

注释很详细,直接上代码 上一篇 新增内容: 1.页面背景的基本写法 2.去除默认上标题实习全屏背景 3. 背景适配细节 源码: index.wxss page{/* 背景链接 */background-image: url(https://pic3.zhimg.com/v2-a76bafdecdacebcc89b5d4f351a53e6a_…

python 截取字符串string.split

目录 作用语法只要第一个值获得第3个值遍历 作用 根据某个符号对数据进行截取 从而获得自己想要的内容 语法 使用’string.split’ 方法 对字符串’123/abc/BPYC’ 以 ‘/’ 进行截取 string "123/abc/BPYC" substring string.split("/") print(subs…

【目标分类图像增强方法】

图像增强方法及其原理 目标分类图像增强是一种用于提高深度学习模型泛化能力的技术,通过在训练过程中对原始图像进行各种变换来增加模型所见数据的多样性。以下是几种常见的图像增强方法及其原理: 几何变换: 旋转(Rotation&#…

【排序】435. 无重叠区间

435. 无重叠区间 方法概述 整体解决方案分为两个部分: eraseOverlapIntervals(int[][] intervals):这是主要方法,用于计算并返回需要移除的区间数量。intervalSchedule(int[][] intvs):这个辅助方法用于通过贪心算法计算出最大…

【SEO 初学者指南】搜索引擎的工作原理:抓取、索引、排名

了解搜索引擎的工作原理,从抓取和索引到排名和惩罚,以及优化和故障排除技巧。 搜索引擎是如何工作的? 搜索引擎通过抓取、索引和排名互联网内容来工作。首先,爬虫通过网络爬虫发现在线内容。然后,索引分析内容并将其…

Spring核心原理

目录 IOCxml配置创建对象xml配置注入属性自动装配引入外部属性文件注解创建对象注解注入属性 AOP方式一 : 通过JDK接口实现方式二 : 通过AspectJ实现AOP JdbcTemplateSpring事务管理整合Mybatis实现一实现二 WebFlux函数式编程 Spring是一个开放源代码的JavaEE设计层面框架&…

C++:拷贝构造函数

1.概念 在现实生活中,可能存在一个与你一样的自己,我们称之为双胞胎。那在创建对象的时候,可否创建一个与已存在对象一模一样的新对象呢?答案是可以的,这就要通过拷贝构造函数来实现了。 拷贝构造函数:只有…

微服务基础

目录 一、单体架构 二、分布式架构 三、微服务 四、微服务结构 五、SpringCloud 六、服务拆分 七、远程调用 一、单体架构 单体架构就是将业务的所有功能都集中在一个项目中进行开发,并打成一个包进行部署。 他的优点很明显,就是架构简单&#xff…

C++的类和对象(四):拷贝构造函数

目录 拷贝构造函数 特性 自定义类型的传值传参和传引用传参对比 赋值运算符重载 拷贝构造函数 基本概念:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在创建一个已存在对象一模一样的新对象时…