package com.chitic.module.core.aop; import com.chitic.module.core.constant.ChiticCoreConstant; import com.chitic.module.core.enums.ChiticResponseCode; import com.chitic.module.core.exception.ChiticException; import com.chitic.module.core.response.ChiticResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.BindException; 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 javax.servlet.http.HttpServletRequest; @RestControllerAdvice(ChiticCoreConstant.BASE_PACKAGE) @Slf4j public class RestControllerExceptionAdvice {
//此处可以拦截JSR303校验不加BindingResult抛出的异常,自定义异常类,按照自己想要的 返回 @ExceptionHandler(BindException.class) public ChiticResponse bindExceptionHandler(BindException ex) { BindingResult bindingResult = ex.getBindingResult(); String errorMsg = ""; if (bindingResult != null && bindingResult.getFieldError() != null) { errorMsg = bindingResult.getFieldError().getDefaultMessage(); } return ChiticResponse.fail(ChiticResponseCode.PARAMS_VALUE_ERROR.getCode(), errorMsg); } @ExceptionHandler(MethodArgumentNotValidException.class) public ChiticResponse methodArgumentNotValidExceptionHandler(MethodArgumentNotValidException ex) { BindingResult bindingResult = ex.getBindingResult(); String errorMsg = ""; if (bindingResult != null && bindingResult.getFieldError() != null) { errorMsg = bindingResult.getFieldError().getDefaultMessage(); } return ChiticResponse.fail(ChiticResponseCode.PARAMS_VALUE_ERROR.getCode(), errorMsg); } @ExceptionHandler(ChiticException.class) public ChiticResponse chiticExceptionHandler(HttpServletRequest request, ChiticException ex) { return ChiticResponse.fail(ex.getCode(), ex.getMessage()); } @ExceptionHandler(Exception.class) public ChiticResponse globalExceptionHandler(HttpServletRequest request, Exception ex) { ex.printStackTrace(); log.error(ex.getMessage()); return ChiticResponse.fail(ChiticResponseCode.SYSTEM_ERROR.getCode(), ChiticResponseCode.SYSTEM_ERROR.getMessage()); } @ExceptionHandler(Throwable.class) public ChiticResponse globalExceptionHandler(HttpServletRequest request, Throwable ex) { ex.printStackTrace(); log.error(ex.getMessage()); return ChiticResponse.fail(ChiticResponseCode.SYSTEM_ERROR.getCode(), ChiticResponseCode.SYSTEM_ERROR.getMessage()); } }
自定义异常类
package com.chitic.module.core.exception; import com.chitic.module.core.enums.ChiticResponseCode; import com.chitic.module.core.response.ChiticResponse; import lombok.*; /** * @author GX * @Description: 全局异常 * @date 2019/5/11 10:18 */ @Data @NoArgsConstructor @AllArgsConstructor @Builder @EqualsAndHashCode(callSuper = false) public class ChiticException extends RuntimeException { /** * 错误编号 */ private String code; /** * 错误信息 */ private String message; public static ChiticException of(ChiticResponse response) { return ChiticException.builder() .code(response.getCode()) .message(response.getMessage()) .build(); } public static ChiticException of(String code, String message) { return ChiticException.builder() .code(code) .message(message) .build(); } public static ChiticException of(ChiticResponseCode responseCode) { return ChiticException.builder() .code(responseCode.getCode()) .message(responseCode.getMessage()) .build(); } }