美文网首页探索SpringSpringHome
Spring常用注解-@ControllerAdvice与@Ex

Spring常用注解-@ControllerAdvice与@Ex

作者: Real_man | 来源:发表于2018-11-13 22:25 被阅读6次

Spring MVC的异常处理非常重要,开发的时候要确保服务器返回给客户端的没有异常,一些未预料到的异常发送到客户端的时候会造成很不好的体验。

这里我们看下Spring的异常处理机制,@ExceptionHandler,@ControllerAdvice

@ExceptionHandler

单独使用@ExceptionHandler时一般写在控制器的内部,在控制器的某个方法上加上@ExceptionHandler注解。

在ExceptionController内部如果抛出了CustomException异常,就会被这个控制器内部的handleError捕捉到。然后进行处理

@Controller
public class ExceptionController {

    @ExceptionHandler({CustomException.class})
    public String handleError(Exception e){
        // ...
        // 处理异常
        return e.getMessage();
    }
}

缺点:
只能作用在特定的控制器,如果每个控制器都添加@ExceptionHandler注解的话,效率太低了。
或者写一个基类的控制器上添加@ExceptionHandler注解,但有时一些控制器已经继承其它的类了,那么还是不够方便。

@ExceptionHandler + @ControllerAdvice

Spring 3.2之后加入了新的@ControllerAdvice注解,可以支持全局的异常处理。这样我们就不用将@ExceptionHandler写的到处都是,只需要集中在一个控制器就可以。

@ControllerAdvice
public class ExceptionController {

    @ExceptionHandler({CustomException.class})
    public String handleError(Exception e){
        // ...
        // 处理异常
        return e.getMessage();
    }

    @ExceptionHandler(Exception.class)
    public ResponseEntity<Object> handleAllException(Exception e){
        // 处理异常
        // do something
        return ResponseEntity.ok(...); 
    }
}

这种处理方式实际上十分灵活,我们可以根据需要返回自己的类型:

  • 返回普通对象
  • 返回ResposeEntity的响应

最后

这里我们简单的提了下Spring常用的两个注解处理程序中的异常,还有一个常用的方式是使用HandlerExceptionResolver,这个有兴趣可以自行学习。

参考

相关文章

网友评论

    本文标题:Spring常用注解-@ControllerAdvice与@Ex

    本文链接:https://www.haomeiwen.com/subject/awyrfqtx.html