@RestControllerAdvice作用:
拦截异常并统一处理
相关注解:
@ExceptionHandler(value = MyException.class) 自定义异常处理
@ResponseStatus(HttpStatus.FORBIDDEN)返回状态码
代码:
/** * @Author WlidcatQin * @Date 2020/1/6 21:37 * 全局异常处理器 */ @Slf4j @RestControllerAdvice public class GlobalExceptionHandlerResolver { /** * 全局异常. * * @param e the e * @return R */ @ExceptionHandler(Exception.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public Result handleGlobalException(Exception e) { log.error("全局异常信息 ex={}", e.getMessage(), e); return Result.builder() .msg(e.getLocalizedMessage()) .code(CommonConstants.FAIL) .build(); } /** * AccessDeniedException * * @param e the e * @return R */ @ExceptionHandler(AccessDeniedException.class) @ResponseStatus(HttpStatus.FORBIDDEN) public Result handleAccessDeniedException(AccessDeniedException e) { String msg = SpringSecurityMessageSource.getAccessor() .getMessage("AbstractAccessDecisionManager.accessDenied" , e.getMessage()); log.error("拒绝授权异常信息 ex={}", msg, e); return Result.builder() .msg(msg) .code(CommonConstants.FAIL) .build(); } /** * validation Exception * * @param exception * @return R */ @ExceptionHandler({MethodArgumentNotValidException.class, BindException.class}) @ResponseStatus(HttpStatus.BAD_REQUEST) public Result handleBodyValidException(MethodArgumentNotValidException exception) { List<FieldError> fieldErrors = exception.getBindingResult().getFieldErrors(); log.error("参数绑定异常,ex = {}", fieldErrors.get(0).getDefaultMessage()); return Result.builder() .msg(fieldErrors.get(0).getDefaultMessage()) .code(CommonConstants.FAIL) .build(); } }
Result类
@Builder @ToString @Accessors(chain = true) @AllArgsConstructor public class Result<T> implements Serializable { private static final long serialVersionUID = 1L; @Getter @Setter private int code = CommonConstants.SUCCESS; @Getter @Setter private String msg = "success"; @Getter @Setter private T data; public Result() { super(); } public Result(T data) { super(); this.data = data; } public Result(T data, String msg) { super(); this.data = data; this.msg = msg; } public Result(Throwable e) { super(); this.msg = e.getMessage(); this.code = CommonConstants.FAIL; } }