001package run.iget.framework.common.handler; 002 003import org.springframework.beans.factory.annotation.Value; 004import org.springframework.validation.BindException; 005import org.springframework.validation.FieldError; 006import org.springframework.web.bind.annotation.ExceptionHandler; 007import org.springframework.web.bind.annotation.RestControllerAdvice; 008 009import lombok.Setter; 010import lombok.extern.slf4j.Slf4j; 011import run.iget.framework.common.enums.BaseResultEnum; 012import run.iget.framework.common.exception.BusinessException; 013import run.iget.framework.common.resp.ResultResp; 014 015/** 016 * 代码千万行,注释第一行,注释不规范,迭代两行泪 017 * ---------------类描述----------------- 018 * 全局异常处理,统一进行保证返回给前端 019 * ---------------类描述----------------- 020 * 021 * @author 大周 022 * @date 2022/11/11 21:52 023 */ 024@Setter 025@Slf4j 026@RestControllerAdvice 027public class GlobalExceptionHandler { 028 029 /** 030 * 是否输出异常信息 031 */ 032 @Value("${fast.framework.consoleError:false}") 033 private Boolean consoleError; 034 035 /** 036 * 处理自定义异常 037 */ 038 @ExceptionHandler(BusinessException.class) 039 public ResultResp<String> handleException(BusinessException ex) { 040 BaseResultEnum resultEnum = ex.getResultEnum(); 041 consoleErrorMsg(ex); 042 return ResultResp.error(resultEnum.getCode(), resultEnum.getDesc()); 043 } 044 045 /** 046 * SpringMVC参数绑定,Validator校验不正确 047 */ 048 @ExceptionHandler(BindException.class) 049 public ResultResp<String> bindException(BindException ex) { 050 FieldError fieldError = ex.getFieldError(); 051 assert fieldError != null; 052 consoleErrorMsg(ex); 053 return ResultResp.error(BaseResultEnum.ERROR_PARAM.getCode(), fieldError.getDefaultMessage()); 054 } 055 056 @ExceptionHandler(Exception.class) 057 public ResultResp<String> handleException(Exception ex) { 058 consoleErrorMsg(ex); 059 return ResultResp.error(ex.getMessage()); 060 } 061 062 /** 063 * 输出异常信息 064 * @param ex 065 */ 066 private void consoleErrorMsg(Exception ex) { 067 if (!Boolean.TRUE.equals(consoleError) || !log.isErrorEnabled()) { 068 return; 069 } 070 log.error(ex.getMessage(), ex); 071 } 072 073}