Spring全局异常处理

@ControllerAdvice
     spring3.2版本后提供的一个controller增强注解,在进行Class扫描时能够自动扫描到它,通常用于定义@ExceptionHandler, @InitBinder和@ModelAttribute ,适用于所有@RequestMapping方法的方法。

@RestControllerAdvice

    @ControllerAdvice+@ResponseBody

@ExceptionHandler

   用于拦截异常,统一捕获处理

@RestControllerAdvice
public class ExceptionResolver{

    @ResponseStatus(HttpStatus.BAD_REQUEST)
    @ExceptionHandler({MethodArgumentNotValidException.class, BindException.class})
    public Result validatorException(Throwable e)
    {
       //参数异常捕获处理
    }

    
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler({SQLException.class, DataAccessException.class})
    public Result databaseException(Throwable e)
    {
        //数据库异常捕获处理
    }

    @ResponseStatus(HttpStatus.NOT_FOUND)
    @ExceptionHandler({NoHandlerFoundException.class})
    public Result apiNotFound(Throwable e, HttpServletRequest request)
    {
        //接口不存在
    }
    
    @ResponseStatus(HttpStatus.METHOD_NOT_ALLOWED)
    @ExceptionHandler({HttpRequestMethodNotSupportedException.class})
    public Result methodNotSupport(Throwable e)
    {
        //请求方法不允许
    }

    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    @ExceptionHandler({Exception.class})
    public Result globalException(HttpServletRequest request, Throwable e)
    {
       //全局异常 
    }

如上例子,我们定义了Exception处理方法和其他子类异常处理方法,当异常发生时,Spring会选择最接近抛出异常的处理方法,即假如发生了SQLException,那会优先调用databaseException方法。


版权声明:本文为wjlzx原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。