@ResponseStatus

news2024/10/25 2:23:19

目录

概述:

用途:

参数:

注意事项:

自定义异常类:

底层原理:


概述:

  • 在 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.coloradmin.cn/o/1497727.html

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

相关文章

嵌入式学习第二十六天!(网络传输:TCP编程)

TCP通信: 1. TCP发端: socket -> connect -> send -> recv -> close 2. TCP收端: socket -> bind -> listen -> accept -> recv -> send -> close 3. TCP需要用到的函数: 1. co…

记一次systemd服务启动找不到Java命令

首先systemd服务文件 /etc/systemd/system/test.service(文件简化处理了) [Unit] Descriptiontest Afternetwork.target [Service] ExecStart/opt/test/bin/test_start.sh [Install] WantedBymulti-user.target其中启动命令ExecStart指向的是一个sh启动脚本, 脚本内…

Win8.1 连接Wifi后开启热点

1 首先管理员运行 cmd, 输入命令,其中ssid无线名称,key密码,此时网络连接出现 本地连接 2. netsh wlan set hostednetwork modeallow ssidwahahaad key12345678 netsh wlan start hostednetwork 2 找到当前连接的 WLAN, 设置共享。 3 先停止…

第18课:让客户看了就满意的商业软文是如何练成的?

选品上的注意事项 结合影视热点 通过追影视热点,找出能够跟产品贴合的点。在前面先道出痛点,痛点越深刻,用户对产品的过度才会更自然。 用户体验 真实体验才能真正写得出来。 结合时事热点 用的少,赶上了用就会效果很好&#xf…

基于51单片机的万年历-心率脉搏计仿真及源程序-保存心率记录

基于51单片机的万年历-心率脉搏计仿真及源程序-保存心率记录 一、系统方案 1、本设计采用51单片机作为主控器。 2、液晶1602显示。 3、DS1302万年历,测心率,按键设置万年历、心率上下限,不在范围蜂鸣器报警。 4、心率测量值保存3组数据。 二、…

文件另存为保存:无法在未启用宏的工作簿中保存以下功能,

Wb.DoNotPromptForConvert true; Wb.Application.DisplayAlerts false;

Java中super关键字作用及解析

在 Java 中,super关键字主要有以下作用: 在子类构造方法中调用父类的构造方法:使用super关键字可以在子类的构造方法中显式调用父类的构造方法,以便继承父类的属性和行为。语法如下:这样可以确保父类的构造方法被正确…

【2】SLoRa: A Systematic Framework for Synergic Interference Resilience In LPWAN

这一篇基于上一篇文章,仅记录我遗忘的知识点; 以较低的成本提供可靠的符号恢复; 符号恢复【振幅和频率】 为了避免环境噪声并提高可靠性,我们采用信号预处理和窗口滑动算法来检测幅度变化点; 信号处理:归一化和指数化…

项目申报书引言部分

文献引用方式: 张三 等,2024; Zhang S et al.,2015; (中文是中文逗号,英文是英文逗号)

专题一 - 双指针 - leetcode 18. 四数之和 - 中等难度

leetcode 18. 四数之和 leetcode 18. 四数之和 | 中等1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现 leetcode 18. 四数之和 | 中等 1. 题目详情 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请…

RabbitMQ理论:RabbitMQ学习思维导图

参考资料 RabbitMQ五种消息模型

搜维尔科技:3D Systems Geomagic Design X 逆向工程软件

产品概述 3D Systems Geomagic Design X 是全面的逆向工程软件 GeomagicoDesign XTM是全面的逆向工程软件,它结合了基于特征的CAD数模与三维扫描数据处理,使您能创建出可编辑、基于特征的CAD数模,并与您现有的CAD软件兼容。 拓展您的设计能…

前端如何上传图片给后台?如何传递 multipart/form-data 类型的数据?图片大小、格式检查?

1. 如何上传图片? 图片上传需要传二进制流,请求头的 content-type 类型需为 multipart/form-data,传递的格式如下图所示 前后端交互通常为: 先调用接口上传二进制流图片然后再上传表单其他内容(第一步通常会返回后台…

Qt---项目代码解析

文章目录 一、main.cpp代码解析二、widget.h代码解析三、widget.cpp代码解析(一) form file 四、.pro Qt项目的工程文件 一、main.cpp代码解析 main函数的形参就是命令行参数。qt是CDefinitely图形界面化编程,要想编写一个qt的图形界面程序,一定要有QAp…

“python -m experiments.cifar10_test“是什么意思

具体解释如下: "python" 是运行 Python 解释器的命令。"-m" 是一个选项,用于指定要运行的模块。"experiments.cifar10_test" 是要运行的 Python 模块的名称。 其中 虽说main.py文件在上一级目录中,仍然可以在…

浮点数和定点数

前言 大家好我是jiantaoyab,这是我所总结作为学习的笔记第七篇,在这里分享给大家,还有一些书籍《深入理解计算机系统》《计算机组成:结构化方法》《计算机体系结构:量化研究方法》,今天我们来了解定点数和浮点数 定点数 BCD编码 …

《汇编语言》第3版 (王爽)第10章检测点解析

第10章 检测点 检测点10.1:补全程序,实现从内存1000:0000处开始执行指令。 解析: 我们知道retf指令是用栈中的数据,同时修改CS和IP寄存器中的内容,实现远转移,而且是先出栈的数据放入IP中,后出栈的数据放入…

如何快速写一篇民间故事并生成视频?

大家平台在刷抖音的时候,可能会看到一些民间故事的视频,播放量一般都很高,凭借其独特魅力,许多创作者在几个月内迅速吸引了超过十万粉丝,实现了数万元的收益!想要加入这个风潮吗?这类视频如何制…

hadoop伪集群部署教程

文章目录 前言一、安装准备1. 安装条件2. 安装jdk3. 配置本节点免密登录 二、安装hadoop1. 下载并解压hadoop2. 设置环境变量2.1 设置hadoop安装目录环境变量2.2. 设置hadoop的root用户环境变量 3. 修改配置文件3.1 修改 etc/hadoop/hadoop-env.sh 文件3.2 修改 etc/hadoop/cor…

一个比较全面实用的C#帮助类、工具类库

前言 经常会有一些同学会问为什么感觉我身边的大佬写一个功能会这么快?一个类似的模块大佬可能半天就搞定了,而我要搞一两天。其实工作久了你会发现很多常用公共的帮助类和工具类,如常见的Excel数据导入导出、文件操作、字符串操作、数据转换…