谷粒商城学习——P67统一异常处理
代码:
去掉@Valid后的BindingResult

@RequestMapping("/save") // @RequiresPermissions("product:brand:save") public R save(@Valid @RequestBody BrandEntity brand){ brandService.save(brand); return R.ok(); }
异常处理类处理BindingResult及返回结果

package com.atguigu.gulimall.product.exception; import com.atguigu.common.exception.BizCodeEnume; import com.atguigu.common.utils.R; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindingResult; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import java.util.HashMap; import java.util.Map; /** * @Description: * @Author: zyn * @Date: 2021-6-30 */ /** * 集中处理所有异常 */ @Slf4j @RestControllerAdvice public class GulimallExceptionControllerAdvice { @ExceptionHandler(value = MethodArgumentNotValidException.class)//指定处理的异常类型 public R handleValidException(MethodArgumentNotValidException e){ log.error("数据校验出现问题{},异常类型{}",e.getMessage(),e.getClass()); BindingResult result=e.getBindingResult(); Map<String,String> map = new HashMap<>(); result.getFieldErrors().forEach(x->{ map.put(x.getField(),x.getDefaultMessage()); }); return R.error(BizCodeEnume.VAILD_EXCEPTION.getCode(),BizCodeEnume.VAILD_EXCEPTION.getMsg()).put("data",map); } @ExceptionHandler(value = Throwable.class)//其他公共异常,优先级小于指定异常 public R handleException(Throwable e){ return R.error(BizCodeEnume.VAILD_EXCEPTION.getCode(),BizCodeEnume.VAILD_EXCEPTION.getMsg()); } }
全局错误码定义规范开发

package com.atguigu.common.exception; /** * @Description: * @Author: zyn * @Date: 2021-6-30 */ /*** * 错误码和错误信息定义类 * 1. 错误码定义规则为5为数字 * 2. 前两位表示业务场景,最后三位表示错误码。例如:100001。10:通用 001:系统未知异常 * 3. 维护错误码后需要维护错误描述,将他们定义为枚举形式 * 错误码列表: * 10: 通用 * 001:参数格式校验 * 11: 商品 * 12: 订单 * 13: 购物车 * 14: 物流 */ public enum BizCodeEnume { UNKNOW_EXCEPTION(10000,"系统未知异常"), VAILD_EXCEPTION(10001,"参数格式校验失败"); private int code; private String msg; BizCodeEnume(int code,String msg){ this.code = code; this.msg = msg; } public int getCode() { return code; } public String getMsg() { return msg; } }
测试效果:
代码里有写了注释,貌似没什么要说的了
本文来自博客园,作者:每天都要学一点,欢迎讨论和转载,转载请注明原文链接:https://www.cnblogs.com/yanan7890/p/14956645.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2017-06-30 检测字符串编码格式
2017-06-30 支付宝接口零碎知识