谷粒商城学习——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