package com.zbkj.common.exception; import com.zbkj.common.response.CommonResult; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.validation.BindException; import org.springframework.validation.BindingResult; import org.springframework.web.HttpMediaTypeNotSupportedException; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; import java.util.Objects; /** * 全局参数、异常拦截 */ @Slf4j @RestControllerAdvice public class GlobalExceptionHandler { // private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class); /** * 拦截表单参数校验 */ @ResponseStatus(HttpStatus.OK) @ExceptionHandler({BindException.class}) public CommonResult bindException(BindException e) { BindingResult bindingResult = e.getBindingResult(); return CommonResult.failed(ExceptionCodeEnum.VALIDATE_FAILED, Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } /** * 拦截JSON参数校验 */ @ResponseStatus(HttpStatus.OK) @ExceptionHandler(MethodArgumentNotValidException.class) public CommonResult bindException(MethodArgumentNotValidException e) { BindingResult bindingResult = e.getBindingResult(); return CommonResult.failed(ExceptionCodeEnum.VALIDATE_FAILED,Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage()); } /** * 拦截参数类型不正确 * @param e * @return */ @ResponseStatus(HttpStatus.OK) @ExceptionHandler(HttpMediaTypeNotSupportedException.class) public CommonResult bindException(HttpMediaTypeNotSupportedException e){ return CommonResult.failed(ExceptionCodeEnum.PRAM_NOT_MATCH,Objects.requireNonNull(e.getMessage())); } //声明要捕获的异常 @ResponseStatus(HttpStatus.OK) @ExceptionHandler(Exception.class) @ResponseBody public CommonResult defaultExceptionHandler(Exception e) { e.printStackTrace(); if(e instanceof CarException) { return CommonResult.failed(ExceptionCodeEnum.FAILED,Objects.requireNonNull(e.getMessage())); } if(e instanceof MissingServletRequestParameterException){ return CommonResult.failed(ExceptionCodeEnum.PRAM_NOT_MATCH, Objects.requireNonNull(e.getMessage())); } //未知错误 return CommonResult.failed(ExceptionCodeEnum.ERROR,e.getMessage()); } }