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

注解详解系列 - @ResponseStatus

在这里插入图片描述

注解简介

在今天的每日一注解中,我们将探讨@ResponseStatus注解。@ResponseStatus是Spring框架中的一个注解,用于为控制器方法指定HTTP响应状态码和理由短语。


注解定义

@ResponseStatus注解用于标记控制器方法或异常类,以指示HTTP响应的状态码和理由短语。以下是一个基本的示例:

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@GetMapping("/notfound")@ResponseStatus(HttpStatus.NOT_FOUND)public String notFound() {return "Resource not found";}
}

在这个示例中,当访问/notfound路径时,Spring会返回404状态码,并在响应体中包含"Resource not found"消息。


注解详解

@ResponseStatus注解可以用来为控制器方法或自定义异常类指定HTTP响应状态码和理由短语。这在需要返回特定HTTP状态码时非常有用。

  • value: 指定HTTP状态码。
  • reason: 指定理由短语(可选)。

使用场景

@ResponseStatus广泛用于Spring MVC应用程序中,用于设置HTTP响应状态码。例如,处理资源未找到、权限不足、服务器内部错误等情况。


示例代码

以下是一个使用@ResponseStatus注解的代码示例,展示了如何处理自定义异常并返回特定的HTTP状态码:

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@GetMapping("/resource")public String getResource() {if (resourceNotFound()) {throw new ResourceNotFoundException();}return "Resource content";}private boolean resourceNotFound() {// 模拟资源未找到的情况return true;}@ExceptionHandler(ResourceNotFoundException.class)@ResponseStatus(HttpStatus.NOT_FOUND)public String handleResourceNotFound(ResourceNotFoundException e) {return e.getMessage();}
}@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "Resource Not Found")
class ResourceNotFoundException extends RuntimeException {public ResourceNotFoundException() {super("Resource not found");}
}

在这个示例中,当getResource方法检测到资源未找到时,会抛出ResourceNotFoundException异常,并返回404状态码和相应的错误消息。


常见问题

问题:如何在返回响应时设置自定义理由短语?

解决方案:可以在@ResponseStatus注解中使用reason属性设置自定义理由短语。

@ResponseStatus(value = HttpStatus.FORBIDDEN, reason = "Access Denied")
public class AccessDeniedException extends RuntimeException {public AccessDeniedException() {super("Access denied");}
}

问题:如何处理HTTP状态码的全局异常?

解决方案:可以使用@ControllerAdvice@ExceptionHandler注解全局处理特定异常,并返回相应的HTTP状态码。

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;@ControllerAdvice
public class GlobalExceptionHandler {@ExceptionHandler(AccessDeniedException.class)@ResponseStatus(HttpStatus.FORBIDDEN)public String handleAccessDeniedException(AccessDeniedException e) {return e.getMessage();}
}

小结

通过今天的学习,我们了解了@ResponseStatus的基本用法和应用场景。明天我们将探讨另一个重要的Spring注解——@ControllerAdvice


相关链接
  • Spring 官方文档
  • Spring MVC 注解驱动的控制器
  • HTTP Status Codes - MDN

希望这个示例能帮助你更好地理解和应用@ResponseStatus注解。如果有任何问题或需要进一步的帮助,请随时告诉我。

相关文章:

  • Java中将文件转换为Base64编码的字节码
  • LabVIEW的热门应用
  • JAVA学习笔记DAY6——SSM_Spring
  • 在Linux上为Windows目标配置Qt交叉编译
  • 鸿蒙开发网络管理:【@ohos.request (上传下载)】
  • 48-4 内网渗透 - Rotten Potato(烂土豆) 提权
  • StableSwarmUI 安装教程(详细)
  • 【朝花夕拾】RT1170 CSI 如何使能摄像头Y8功能
  • 【自动驾驶】从零开始做自动驾驶小车
  • scale()函数详解
  • MySQL笔记——事务
  • 分享HTML显示2D/3D时间
  • Unity3d 游戏暂停(timeScale=0)引起的deltaTime关联的系列问题解决
  • [c++刷题]贪心算法.N01
  • 揭秘无局放电源:定义、工作原理及其在工业设备中的重要性
  • avalon2.2的VM生成过程
  • canvas 绘制双线技巧
  • Cookie 在前端中的实践
  • gulp 教程
  • Java的Interrupt与线程中断
  • Java应用性能调优
  • k个最大的数及变种小结
  • Lsb图片隐写
  • magento2项目上线注意事项
  • Netty 4.1 源代码学习:线程模型
  • PaddlePaddle-GitHub的正确打开姿势
  • spring + angular 实现导出excel
  • SpriteKit 技巧之添加背景图片
  • 百度地图API标注+时间轴组件
  • 从0到1:PostCSS 插件开发最佳实践
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 使用putty远程连接linux
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • # Redis 入门到精通(九)-- 主从复制(1)
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • ## 基础知识
  • #FPGA(基础知识)
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (强烈推荐)移动端音视频从零到上手(上)
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)nsfocus-绿盟科技笔试题目
  • **CentOS7安装Maven**
  • .a文件和.so文件
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .cfg\.dat\.mak(持续补充)
  • .Net MVC + EF搭建学生管理系统
  • .NET 服务 ServiceController
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .net 无限分类