gpt4 book ai didi

java - Spring 3.0 MVC 异常处理程序

转载 作者:搜寻专家 更新时间:2023-11-01 02:54:39 25 4
gpt4 key购买 nike

我正在从 Spring MVC Controller 编写我的异常处理程序,我有以下代码:

@ExceptionHandler(NullPointerException.class)
public ModelAndView handleMyException(NullPointerException exception) {
System.out.println(exception.getMessage());
ModelAndView modelAndView = new ModelAndView("/errors/404");
modelAndView.addObject("message", exception.getMessage());
return modelAndView;
}

第二个:

@ExceptionHandler(ArithmeticException.class)
public ModelAndView handleException(ArithmeticException exception) {
System.out.println(exception.getMessage());
ModelAndView modelAndView = new ModelAndView("/errors/404");
modelAndView.addObject("message", exception.getMessage());
return modelAndView;
}

现在我正在编写我的代码以抛出这些异常:

第一行抛出算术异常:

System.out.println(100/0);

它抛出正确的异常,并且 exception.getMessage() 返回消息“/by zero”。

现在我试图通过以下方式抛出第二个异常:

String test = null;
System.out.println(test.charAt(2));

引发了异常,但是 exception.getMessage() 返回 null 并且 stack Trace 也为 null。

有趣的是,在 log4j 记录器中,我看到了两个异常的完整堆栈跟踪。为什么它会这样?

最佳答案

正如 affe 所说,null 是消息。您只是将消息附加到要显示的模型,因此您不会看到堆栈跟踪。

我的建议是规划一个空指针是不值得的。 NPE 是一种程序员错误,如果呈现给用户,就是缺陷或错误。

此外,根据您的代码,您以相同的方式处理和呈现所有异常,因此您可以拥有一个仅处理 ThrowableException 的异常处理程序。这也可以做到via the config, or even in your web.xml .

关于java - Spring 3.0 MVC 异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4048055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com