代码之家  ›  专栏  ›  技术社区  ›  Javi

@异常处理程序不处理引发的异常

  •  9
  • Javi  · 技术社区  · 15 年前

    我的控制器中有一个方法,可以处理应用程序抛出的异常。所以我有一个像这样的方法。

    @Controller
    public class ExceptionController {
    
        @RequestMapping(value="/error")
        @ExceptionHandler(value={Exception.class, NullPointerException.class})
        public String showError(Exception e, Model model){
            return "tiles:error";
        }
    }
    

    为了尝试i,如果它有效,我在其他方法控制器的另一个方法中抛出NullPointerException:

    boolean a = true;
    if(a){ 
        throw new NullPointerException();
    }
    

    在抛出异常之后,它将被打印到JSP中,但它不会抛出我的showError()方法(我在那里设置了一个断点,它从未进入)。showError()方法将捕获异常,并根据异常类型显示不同的错误页(尽管现在它始终显示相同的错误页)。如果我转到url/error,它会显示错误页面,这样showError()方法就可以了。

    我用的是弹簧3。

    有什么问题?

    谢谢。

    2 回复  |  直到 11 年前
        1
  •  7
  •   skaffman    15 年前

    如果查看日志,您可能会看到:

    java.lang.IllegalStateException : 不支持的参数 [ org.springframework.ui.Model @ExceptionHandler 方法

    换言之, @异常处理程序 方法不允许声明 Model 参数(见) docs )

    删除该参数(您无论如何都不使用),它应该按预期工作。

        2
  •  0
  •   Joram    11 年前

    如果要全局(在控制器外部)处理异常,则可以使用@controlleradvice注释类,将@exceptionhandler注释的方法放在该类中。

    看见 http://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc 举个例子。 和 http://blog.codeleak.pl/2013/11/controlleradvice-improvements-in-spring.html 在春天4号进行的改进。

    推荐文章