电商项目专题(五)-通用的的异常处理
1.场景预设1.1.场景加入我们做新增商品需要接收下面的参数price价格 name名称然后对数据做简单校验价格不能为空新增时自动生成 ID 然后随商品对象一起返回1.2.代码实现项目结构实体类packagecom.yigou.item.pojo;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;/** * author bruceliu * create 2019-09-01 12:36 * description */DataNoArgsConstructorAllArgsConstructorpublicclassItem{privateInteger id;privateString name;privateLong price;}servicepackagecom.yigou.item.service;importcom.yigou.item.pojo.Item;importorg.springframework.stereotype.Service;importjava.util.Random;/** * author bruceliu * create 2019-09-03 22:12 * description */ServicepublicclassItemService{publicItemsaveItem(Item item){// 商品新增intidnewRandom().nextInt(100);item.setId(id);returnitem;}}controllerpackagecom.yigou.item.controller;importcom.yigou.item.pojo.Item;importjava.util.List;importcom.yigou.item.service.ItemService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.http.HttpStatus;importorg.springframework.http.ResponseEntity;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;/** * author bruceliu * create 2019-09-01 12:38 * description */RestControllerRequestMapping(item)publicclassItemController{AutowiredprivateItemService itemService;PostMappingpublicResponseEntityItemsaveItem(Item item){// 校验商品的价格if(item.getPrice()null){returnResponseEntity.status(HttpStatus.BAD_REQUEST).body(null);}Item item1itemService.saveItem(item);returnResponseEntity.status(HttpStatus.CREATED).body(item1);}}测试如果price为空改写Controller给出异常消息packagecom.yigou.item.controller;importcom.yigou.item.pojo.Item;importjava.util.List;importcom.yigou.item.service.ItemService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.http.HttpStatus;importorg.springframework.http.ResponseEntity;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;/** * author bruceliu * create 2019-09-01 12:38 * description */RestControllerRequestMapping(item)publicclassItemController{AutowiredprivateItemService itemService;PostMappingpublicResponseEntityItemsaveItem(Item item){// 校验商品的价格if(item.getPrice()null){thrownewRuntimeException(价格不能为空);}Item item1itemService.saveItem(item);returnResponseEntity.status(HttpStatus.CREATED).body(item1);}}测试结果是SpringMvc处理的异常但是500是服务器内部错误而真正异常的原因是客户端引发的异常上述异常是由 SpringMVC 处理的而我们真正要的是自己处理2.通用的异常处理放到yigou-common里面公共起来ExceptionEnum枚举 异常packagecom.yigou.common.enums;importlombok.*;/** * author bruceliu * create 2019-09-03 22:35 * description */GetterNoArgsConstructorAllArgsConstructorpublicenumExceptionEnum{PRICE_CANNOT_BE_NULL(400,价格不能为空);privateintcode;privateString msg;}ExceptionResult异常结果 定义packagecom.yigou.common.vo;importcom.yigou.common.enums.ExceptionEnum;importlombok.Data;/** * author bruceliu * create 2019-09-03 22:37 * description */DatapublicclassExceptionResult{privateintstatus;privateString message;privateLong timestamp;publicExceptionResult(ExceptionEnum em){this.statusem.getCode();this.messageem.getMsg();this.timestampSystem.currentTimeMillis();}}YigouException自定义 异常packagecom.yigou.common.exception;importcom.yigou.common.enums.ExceptionEnum;importlombok.AllArgsConstructor;importlombok.Getter;importlombok.NoArgsConstructor;/** * author bruceliu * create 2019-09-03 22:40 * description */NoArgsConstructorAllArgsConstructorGetterpublicclassYigouExceptionextendsRuntimeException{privateExceptionEnum exceptionEnum;}CommonExceptionHandler定义 通用的异常处理添加依赖不需要指定版本dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactId/dependencypackagecom.yigou.common.advice;importcom.yigou.common.exception.YigouException;importcom.yigou.common.vo.ExceptionResult;importorg.springframework.http.ResponseEntity;importorg.springframework.web.bind.annotation.ControllerAdvice;importorg.springframework.web.bind.annotation.ExceptionHandler;/** * author bruceliu * create 2019-09-03 22:41 * description */ControllerAdvicepublicclassCommonExceptionHandler{ExceptionHandler(YigouException.class)publicResponseEntityExceptionResulthandleException(YigouException e){returnResponseEntity.status(e.getExceptionEnum().getCode()).body(newExceptionResult(e.getExceptionEnum()));}}在yigou-item-service里面依赖yigou-commondependencygroupIdcom.yigou.parent/groupIdartifactIdyigou-common/artifactIdversion1.0-SNAPSHOT/version/dependency改写 ItemControllerpackagecom.yigou.item.controller;importcom.yigou.common.enums.ExceptionEnum;importcom.yigou.common.exception.YigouException;importcom.yigou.item.pojo.Item;importjava.util.List;importcom.yigou.item.service.ItemService;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.http.HttpStatus;importorg.springframework.http.ResponseEntity;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;/** * author bruceliu * create 2019-09-01 12:38 * description */RestControllerRequestMapping(item)publicclassItemController{AutowiredprivateItemService itemService;PostMappingpublicResponseEntityItemsaveItem(Item item){// 校验商品的价格if(item.getPrice()null){thrownewYigouException(ExceptionEnum.PRICE_CANNOT_BE_NULL);}Item item1itemService.saveItem(item);returnResponseEntity.status(HttpStatus.CREATED).body(item1);}}测试

相关新闻

3大核心功能揭秘:XCOM 2模组管理器AML如何让你的游戏体验提升300%

3大核心功能揭秘:XCOM 2模组管理器AML如何让你的游戏体验提升300%

3大核心功能揭秘:XCOM 2模组管理器AML如何让你的游戏体验提升300% 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/g…

2026/10/20 1:57:40 阅读更多 →
京东自动化脚本终极指南:3步实现24小时无人值守收益管理

京东自动化脚本终极指南:3步实现24小时无人值守收益管理

京东自动化脚本终极指南:3步实现24小时无人值守收益管理 【免费下载链接】jd_scripts-lxk0301 长期活动,自用为主 | 低调使用,请勿到处宣传 | 备份lxk0301的源码仓库 项目地址: https://gitcode.com/gh_mirrors/jd/jd_scripts-lxk0301 …

2026/10/19 16:58:17 阅读更多 →
应用上传到谷歌商店

应用上传到谷歌商店

参考链接 https://blog.csdn.net/cjh94520/article/details/70306601

2026/10/20 1:57:53 阅读更多 →

最新新闻

Frida动态插桩实战:从Hook到内存扫描的完整指南

Frida动态插桩实战:从Hook到内存扫描的完整指南

做移动端安全测试这些年,我见过太多人把大量时间花在反编译和读汇编上,遇到加了壳的应用就只能干瞪眼。后来我开始把 Frida 动态插桩作为主要分析手段,很多原本要折腾半天的任务,现在几分钟就能拿到结果。这篇文章我会从最基础的 …

2026/10/20 14:48:08 阅读更多 →
C++实战:用VS编写贪吃蛇游戏的核心逻辑与完整源码

C++实战:用VS编写贪吃蛇游戏的核心逻辑与完整源码

用VS和C写一个贪吃蛇游戏,听起来很基础,但真做起来,里面藏着不少值得抠的细节。我把完整源码放在下面,你在Visual Studio里新建一个控制台应用,复制进去就能编译运行。对刚学完C语法、想做点东西验证自己的入门者来说&…

2026/10/20 14:48:08 阅读更多 →
工业时序建模:分清机理与机制,才能让模型长出筋骨

工业时序建模:分清机理与机制,才能让模型长出筋骨

1. 先把"机理"这层窗户纸捅破:确定性因果链做工业数据建模这些年,最常碰见的尴尬不是算法调不好,而是开会时一屋子人对着"机理"和"机制"这两个词各说各话。做设备的老师傅嘴里的"机理清楚"&#xff…

2026/10/20 14:48:08 阅读更多 →
机房管理系统落地指南:从SNMP/IPMI选型到告警联动与避坑实践

机房管理系统落地指南:从SNMP/IPMI选型到告警联动与避坑实践

简介:一套面向高校数据库课程设计的机房管理系统完整资料,覆盖机房信息、设备信息、用户信息、预约信息和使用记录等核心业务实体,并针对资源调度、冲突避免与使用分析给出明确的数据组织方案。资源共三个文件,包含两份文档和一份…

2026/10/20 14:48:08 阅读更多 →
融合敏感度先验的条件扩散模型:电阻抗成像重建新思路

融合敏感度先验的条件扩散模型:电阻抗成像重建新思路

最近整理手头的一个电阻抗成像项目代码和实验记录,想把这套技术路线从头到尾理清楚。电阻抗成像(Electrical Impedance Tomography,EIT)本质上就是个逆问题:边界贴电极,注入已知电流,测一组电压…

2026/10/20 14:48:08 阅读更多 →
60次实测:MCP不省上下文,子agent平均省38.1%token增量

60次实测:MCP不省上下文,子agent平均省38.1%token增量

做Agent应用的人,大概都被问过一个问题:接上MCP之后,上下文是不是就能省不少?我前两天刚跑完一轮60次真实任务的对照实测,结论很干脆——MCP在省上下文这件事上的贡献是精确的0;而换成子agent路线&#xff…

2026/10/20 14:46:40 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →