在Spring Rest上使用@ControllerAdvice进行异常处理

时间:2018-10-01 20:08:57

标签: spring spring-mvc spring-boot

我有一个controllerAdvice类,用于处理两个异常

@ControllerAdvice
public class MyGlobalExceptionHandler{
    @ExceptionHandler({ UserNotFoundException.class, ContentNotAllowedException.class }){

//my code here 

}

现在在控制器上,如果我将代码放在try catch块中,那两个exception是否会到达controllerAdvice类?

@RequestMapping(value = "/myurl", method = RequestMethod.GET)
        public ResponseEntity<?>  getMyUrl(@Valid @ModelAttribute MyObject ap,BindingResult bindingResult ) {    
try{    
     //my code here that will throw  UserNotFoundException or ContentNotAllowedException
}Catch(Exception e){
    //handle exception here    
}

我不明白上面的示例将如何进行异常处理。

2 个答案:

答案 0 :(得分:1)

也许您可以做到:

@RequestMapping(value = "/myurl", method = RequestMethod.GET)
public ResponseEntity<?>  getMyUrl(@Valid @ModelAttribute MyObject ap,BindingResult bindingResult ) {    
    try{    
        // Your code here that will throw  UserNotFoundException or ContentNotAllowedException
    } catch(Exception exception){

        if (exception instanceof UserNotFoundException || exception instanceof ContentNotAllowedException) {
             throw exception;
        }

        // Handle other types of exceptions here    
    }
}

然后将仅处理UserNotFoundExceptionContentNotAllowedException,并且@ExceptionHandler中的@ControllerAdvice方法将能够处理它们。

答案 1 :(得分:0)

@ControllerAdvice用于拦截控制器的异常。当一个应用程序具有多个控制器并且需要以独特的方式拦截或处理特定异常时,将使用此方法。控制器中的异常处理取决于您如何在MyGlobalExceptionHandler中构造ResponseEntity。