spring-webmvc @ResponseStatus 典型用法

典型用法

为某个接口指定固定的 HTTP 状态码(如创建成功返回 201)

当该方法执行成功时,HTTP 响应状态码会是 201 Created。
适用于不需要动态控制状态码的场景。

@PostMapping("/users")
@ResponseStatus(HttpStatus.CREATED)
public User createUser(@RequestBody User user) {return userService.save(user);
}

抛出自定义异常时自动设置 HTTP 状态码(如资源未找到返回 404)

当抛出 ResourceNotFoundException 时,Spring 会自动将其映射为 404 Not Found 响应。非常适合统一异常处理机制。

@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {public ResourceNotFoundException(String message) {super(message);}
}@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {return userService.findById(id).orElseThrow(() -> new ResourceNotFoundException("User not found"));
}

结合 @ControllerAdvice 实现全局异常处理

在结合 @ControllerAdvice 实现全局异常处理时,通常不会直接使用 @ResponseStatus 注解来设置响应状态码,而是通过返回值类型 ResponseEntity 或其他封装方式来显式控制 HTTP 状态码和响应体内容。

@ControllerAdvice
public class GlobalExceptionHandler {// 处理资源未找到异常@ExceptionHandler(ResourceNotFoundException.class)public ResponseEntity<ErrorResponse> handleResourceNotFound(ResourceNotFoundException ex) {ErrorResponse error = new ErrorResponse("RESOURCE_NOT_FOUND", ex.getMessage());return ResponseEntity.status(HttpStatus.NOT_FOUND).body(error);}// 处理参数校验异常@ExceptionHandler(MethodArgumentNotValidException.class)public ResponseEntity<ErrorResponse> handleValidationExceptions(MethodArgumentNotValidException ex) {Map<String, String> errors = new HashMap<>();ex.getBindingResult().getAllErrors().forEach(error -> {String field = ((FieldError) error).getField();String message = error.getDefaultMessage();errors.put(field, message);});ErrorResponse error = new ErrorResponse("VALIDATION_ERROR", errors);return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error);}// 处理所有其他异常@ExceptionHandler(Exception.class)public ResponseEntity<ErrorResponse> handleGeneralException(Exception ex) {ErrorResponse error = new ErrorResponse("INTERNAL_SERVER_ERROR", "An unexpected error occurred");return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(error);}
}

指定响应体内容(不推荐)

虽然 @ResponseStatus 可以设置 reason 属性,但不推荐直接通过注解设置响应体内容,因为这会导致响应格式不一致。

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

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

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

相关文章

鸿蒙Next仓颉语言开发实战教程:设置页面

仓颉语言商城应用的页面开发教程接近尾声了&#xff0c;今天要分享的是设置页面&#xff1a; 导航栏还是老样式&#xff0c;介绍过很多次了&#xff0c;今天不再赘述。这个页面的内容主要还是介绍List容器的使用。 可以看出列表内容分为三组&#xff0c;所以我们要用到ListIte…

Redis 第三讲 --- 指令篇 通用命令(一)

前言&#xff1a; 在《Redis 第二讲》中&#xff0c;我们完成了 Redis 的安装与环境配置&#xff0c;为实际操作奠定了基础。本讲将正式进入 Redis 的核心领域——指令操作。我们将从最基础的键值操作开始&#xff0c;逐步掌握数据读写、键管理及生产环境注意事项&#xff0c;…

数字媒体专业课程介绍以及就业方向

专业课程体系融合艺术创作与技术实践,旨在培养兼具美学素养和产业应用能力的复合型人才。以下是核心课程模块及代表性课程,涵盖从基础到高阶的全流程训练: 🎨 一、核心课程体系 艺术基础课程 绘画训练:素描、速写、色彩理论、构成艺术,培养造型能力与色彩运用2610。 动…

Spring-创建第一个SpringBoot项目

目录 一.使用IDEA创建 1.专业版 2.社区版 二.使用网页创建项目 三.项目目录介绍 一.使用IDEA创建 1.专业版 修改Server URL为https://start.aliyun.com 2.社区版 这里需要注意对应的IDEA版本&#xff0c;版本不对导入无法使用。 不需要解压&#xff0…

【数据分析三:Data Storage】数据存储

数据真是越来越多啊 正文开始 一、数据 结构化数据 可以使用关系型数据库表示和存储的数据&#xff0c;拥有固定结构 半结构化数据 弱结构化&#xff0c;虽然不符合关系型数据模型的要求&#xff0c;但是含有相关的标记(自描述结构)&#xff0c;分割实体及其属性 。如&#xf…

Spring Boot 整合 Spring AI 与 MCP 开发智能体工具指南

Spring Boot 整合 Spring AI 与 MCP 开发智能体工具指南 一、引言 随着大语言模型(LLM)的普及&#xff0c;越来越多的开发者希望将其集成到自己的应用中。Spring AI 作为 Spring 生态下的 AI 集成框架&#xff0c;提供了便捷的方式来对接各种大模型。而 MCP(Model Context Pr…

【开源项目】GraphRAG Agent:可解释、可推理的下一代智能问答系统

GraphRAG Agent&#xff1a;可解释、可推理的下一代智能问答系统 ​​引言​​ 传统 RAG&#xff08;检索增强生成&#xff09;系统常因“黑盒推理”和上下文断裂被诟病。微软开源的 GraphRAG 框架尝试用知识图谱解决这一问题&#xff0c;而​​Graph RAG Agent​​&#xff0…

【论文笔记】【强化微调】AgentThink:思维链推理 + 工具调用

AgentThink: A Unified Framework for Tool-Augmented Chain-of-Thought Reasoning in Vision-Language Models for Autonomous Driving 1. 引述 这是一篇自动驾驶领域的论文。我对这篇论文主要感兴趣的点在于其对于工具调用&#xff08;Tool Call&#xff09;的设计。这一点同…

前端页面Javascript进阶DOM与BOM

一、DOM基础概念 DOM 是文档对象模型&#xff0c;提供编程接口用于操作 HTML 和 XML 文档。它将文档表示为节点树&#xff0c;每个节点代表文档的一部分&#xff0c;如元素、文本、属性等。通过 DOM&#xff0c;开发者可以访问和修改文档的结构、样式与内容。 文档节点类型 …

AWS CloudFormation深度解析:构建现代云原生应用基础设施

在现代云原生应用开发中,基础设施即代码(Infrastructure as Code, IaC)已成为标准实践。本文将深入解析一个完整的AWS CloudFormation模板,该模板为GlowChat Connector应用构建了生产级的基础设施。 模板概述 这个CloudFormation模板是一个两部分部署架构中的第一部分,专…

Oracle 查看所有表的字段名、数据类型及长度

1.只查看某个特定表的字段名 SELECT column_name, data_type, data_length FROM user_tab_columns WHERE table_name 你的表名 -- 注意大写 ORDER BY column_id;2.查看当前用户下所有表的字段名 SELECT table_name, column_name, data_type, data_length FROM user_tab_colu…

创客匠人分享知识付费监管升级下的行业价值重构:从合规挑战到发展机遇的实践路径

引言&#xff1a;监管政策背后的行业逻辑转向 知识付费领域的监管体系升级&#xff0c;本质上是对行业发展路径的重新校准。随着 "内容产品需具备知识沉淀载体" 等新规落地&#xff0c;行业正在经历从 "流量驱动型增长" 到 "价值驱动型发展" 的…

边缘计算的认识和应用

边缘计算 边缘计算是一种分布式计算范式&#xff0c;它将计算能力和数据存储放置在离数据源更近的位置&#xff0c;而不是依赖于集中式的数据中心。通过在“边缘”进行数据处理&#xff0c;边缘计算可以减少延迟、提高响应速度、节省带宽&#xff0c;并增强数据隐私和安全性。…

Arduino R4 WIFI横向滚动显示16×16LED屏

实现一个从左向右横向滚动的"吉祥如意"显示效果。 arduino r4 WiFi滚动显示16*16led #include <SPI.h>// 引脚定义 const int RowA 2, RowB 3, RowC 4, RowD 5; const int OE 6; const int LATCH 10;// 字模数据 (吉祥如意) const PROGMEM byte characte…

html css js网页制作成品——HTML+CSS+js力学光学天文网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…

嵌入式开发之freeRTOS移植

FreeRTOS 是一款广泛应用于嵌入式系统的开源实时操作系统&#xff08;RTOS&#xff09;&#xff0c;其移植过程需要结合具体硬件平台和编译器进行适配。以下是 FreeRTOS 移植的详细步骤和关键注意事项&#xff1a; 一、移植前的准备工作 1. 硬件平台确认 处理器架构&#xf…

【算法 day07】LeetCode 344.反转字符串 | 541. 反转字符串II | 卡码网:54.替换数字

344.反转字符串 题目链接 | 文档讲解 |视频讲解 : 链接 1.思路&#xff1a; 采用双指针&#xff0c;left从0开始移动,right从尾元素进行移动 循环判断条件&#xff1a;left< right,边界值使用举例法&#xff0c;eg: [ h ,e ,l,o ]偶数个不会相遇, [h ,e ,l ,l ,o ]奇数个&…

从检索到生成:RAG 如何重构大模型的知识边界?

引言&#xff1a;知识边界的突破与重构 在人工智能技术快速发展的今天&#xff0c;大型语言模型&#xff08;LLMs&#xff09;已经展现出强大的文本生成和理解能力。然而&#xff0c;这些模型在实际应用中仍面临着知识时效性、事实准确性和可溯源性等核心挑战。检索增强生成&a…

前端基础知识CSS系列 - 05(BFC的理解)

一、是什么 我们在页面布局的时候&#xff0c;经常出现以下情况&#xff1a; 这个元素高度怎么没了&#xff1f;这两栏布局怎么没法自适应&#xff1f;这两个元素的间距怎么有点奇怪的样子&#xff1f;...... 原因是元素之间相互的影响&#xff0c;导致了意料之外的情况&…

Prompt Engineering 学习指南:从入门到精通的最佳路径与资源

本 Prompt Engineering 技术报告,旨在提供一个从入门到精通的清晰学习路径、核心方案,并附上最关键的 GitHub 仓库资源。您可以将此报告作为快速提升 Prompt 能力的“速查手册”和“成长地图”。 Prompt Engineering 学习指南:从入门到精通的最佳路径与资源 技术报告摘要 (…