多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
common ``` /** * 错误code 和提示 */ public enum BizCodeEnum { // 10 开头是通用错误 start UNKNOWN_EXCEPTION(10000, "系统未知异常"), VALID_EXCEPTION(10001, "参数校验未通过"); // 10 开头是通用错误 end private int code; private String msg; BizCodeEnum(int code, String msg) { this.code = code; this.msg = msg; } public int getCode() { return code; } public String getMsg() { return msg; } } ``` 具体项目 ``` /** * 统一异常处理类 * basePackages => 只捕获这个路径下的异常, 改成自己的 * 中间使用 ** 或 * 的通配符都没起效果 */ @Slf4j @RestControllerAdvice(basePackages = "com.product.controller") public class ExceptionControllerAdvice { @ExceptionHandler(value = Exception.class) public R handleException(Exception e) { log.error("服务器错误{},异常类型:{}", e.getMessage(), e.getClass()); return R.error(BizCodeEnum.UNKNOWN_EXCEPTION.getCode(), BizCodeEnum.UNKNOWN_EXCEPTION.getMsg()); } // 数据校验 @ExceptionHandler(value = MethodArgumentNotValidException.class) public R handleValidException(MethodArgumentNotValidException e) { log.error("数据校验未通过{},异常类型:{}", e.getMessage(), e.getClass()); // controller 层不能在使用 BindingResult BindingResult bindingResult = e.getBindingResult(); Map<String, String> errorMap = Maps.newHashMap(); // 报错未通过的错误项, 返回给前端 bindingResult.getFieldErrors().forEach(fieldError -> { errorMap.put(fieldError.getField(), fieldError.getDefaultMessage()); }); return R.error(BizCodeEnum.VALID_EXCEPTION.getCode(), BizCodeEnum.VALID_EXCEPTION.getMsg()) .put("data", errorMap); } } ```