Springboot-全局异常处理

550 阅读1分钟

引入依赖

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.6</version>
    <scope>provided</scope>
</dependency>

异常信息实体类ErrorResponse.java

主要用于包装异常信息

@Data
@Getter
@Setter
public class ErrorResponse {
    private String message;
    private String errorTypeName;

    public ErrorResponse(Exception e) {
        this(e.getClass().getName(), e.getMessage());
    }

    public ErrorResponse(String errorTypeName, String message) {
        this.errorTypeName = errorTypeName;
        this.message = message;
    }
}

全局异常处理GlobalExceptionHandler.java

@ControllerAdvice
public class GlobalExceptionHandler {

    private Logger log = LoggerFactory.getLogger(GlobalExceptionHandler.class);

    ErrorResponse illegalArgumentException  = new ErrorResponse(new IllegalArgumentException("请求参数错误,请稍后重试!"));
    ErrorResponse NullPointerException = new ErrorResponse(new NullPointerException("请求发生了空指针异常,请稍后再试"));

    /**
     *
     * 拦截非法参数异常
     * @param request
     * @return
     * @throws Exception
     */
    @ExceptionHandler(value = IllegalArgumentException.class)
    public ModelAndView illegalArgumentExceptionHandler(HttpServletRequest request) throws Exception {
        log.error("Requst URL : {},Exception : {}", request.getRequestURL(),illegalArgumentException.getMessage());
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg",illegalArgumentException.getMessage());
        mv.addObject("type", illegalArgumentException.getErrorTypeName());
        mv.setViewName("error");
        return mv;
    }

    /**
     * 拦截空指针异常
     * @param request
     * @return
     */
    @ExceptionHandler(value = NullPointerException.class)
    public ModelAndView nullPointerExceptionHandler(HttpServletRequest request) {
        log.error("Requst URL : {},Exception : {}", request.getRequestURL(),NullPointerException.getMessage());
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg",NullPointerException.getMessage());
        mv.addObject("type", NullPointerException.getErrorTypeName());
        mv.setViewName("error");
        return mv;
    }
}

Controller

@RestController
@RequestMapping("/api")
public class ExceptionController {

    @GetMapping("/illegalArgumentException")
    public void throwException() {
        throw new IllegalArgumentException();
    }

    @GetMapping("/nullPointerException")
    public void throwException2() {
        throw new NullPointerException();
    }
}