@ControllerAdvice public class GlobalExceptionHandler { private static final Logger logger =Logger.getLogger(GlobalExceptionHandler.class); // LoggerFactory.getLogger(GlobalExceptionHandler.class); public GlobalExceptionHandler() {} /* * 如果单使用@ExceptionHandler,只能在当前Controller中处理异常。 * 但当配合@ControllerAdvice一起使用的时候,就可以摆脱那个限制了。 * */ @ExceptionHandler(Throwable.class) @ResponseBody public ResponseEntity<ServiceResult> exceptionHandler(Throwable e, HttpServletResponse response) { logger.error("异常=====",e); ServiceResult resp = new ServiceResult(); if (e instanceof BaseException) { BaseException ee = (BaseException) e; resp.setCode(ee.getCode()); resp.setDesc(ee.getMessage()); if(ee.getCode() != 401){ if("com.lf.commons.exception.ErrorCode".equals(ee.getStackTrace()[0].getClassName())){ logger.info(ee.toString()+" >>>> "+ee.getStackTrace()[1].toString()); }else{ logger.info(ee.toString()); } } } else if(e instanceof HttpMessageNotReadableException){ HttpMessageNotReadableException manve = (HttpMessageNotReadableException)e; resp.setCode(ErrorCode.BAD_REQUEST.getCode()); resp.setDesc(ErrorCode.BAD_REQUEST.getDesc()); resp.setData(manve.getMessage()); } else if(e instanceof MethodArgumentTypeMismatchException){ MethodArgumentTypeMismatchException manve = (MethodArgumentTypeMismatchException)e; resp.setCode(ErrorCode.BAD_PARAMTER.getCode()); resp.setDesc(ErrorCode.BAD_PARAMTER.getDesc()); resp.setData(manve.getMessage()); } else if(e instanceof MethodArgumentNotValidException){//验证时desc返回错误信息(验证信息) MethodArgumentNotValidException binde = (MethodArgumentNotValidException)e; BindingResult bindingResult = binde.getBindingResult(); FieldError fieldError = bindingResult.getFieldError(); resp.setCode(ErrorCode.BAD_PARAMTER.getCode()); resp.setDesc(ErrorCode.BAD_PARAMTER.getDesc()); if(fieldError!=null){ //resp.setData(fieldError.getDefaultMessage()); resp.setData(fieldError.getField() + ":" + fieldError.getDefaultMessage()); resp.setDesc(fieldError.getDefaultMessage()); } } else if(e instanceof BindException){//验证时desc返回错误信息(验证信息) BindException binde = (BindException)e; BindingResult bindingResult = binde.getBindingResult(); FieldError fieldError = bindingResult.getFieldError(); resp.setCode(ErrorCode.BAD_PARAMTER.getCode()); resp.setDesc(ErrorCode.BAD_PARAMTER.getDesc()); if(fieldError!=null){ //resp.setData(fieldError.getDefaultMessage()); resp.setData(fieldError.getField() + ":" + fieldError.getDefaultMessage()); resp.setDesc(fieldError.getDefaultMessage()); } } else if(e instanceof org.springframework.web.HttpRequestMethodNotSupportedException){ resp.setCode(HttpStatus.METHOD_NOT_ALLOWED.value()); resp.setDesc(e.getMessage()); } else if(e instanceof org.springframework.web.HttpMediaTypeException){ resp.setCode(HttpStatus.UNSUPPORTED_MEDIA_TYPE.value()); resp.setDesc(e.getMessage()); }else if(e instanceof IOException){ IOException ioe=(IOException)e; if (StringUtils.containsIgnoreCase(ExceptionUtils.getRootCauseMessage(ioe), "Broken pipe")) { return null; //socket is closed, cannot return any response }else{ String fullStackTrace = ExceptionUtils.getFullStackTrace(ioe); resp.setCode(ErrorCode.INTERNAL_SERVER_ERROR.getCode()); resp.setDesc(ioe.getMessage()); resp.setData(fullStackTrace); } }else if(e instanceof JSONException){ JSONException exception= (JSONException) e; resp.setCode(ErrorCode.INTERNAL_SERVER_ERROR.getCode()); resp.setDesc(exception.getMessage()); logger.error("",e); }else { resp.setCode(ErrorCode.INTERNAL_SERVER_ERROR.getCode()); resp.setDesc(ErrorCode.INTERNAL_SERVER_ERROR.getDesc()); logger.error("",e); } return new ResponseEntity<ServiceResult>(resp,HttpStatus.OK); } }
全局异常拦截
最新推荐文章于 2024-08-12 14:09:14 发布