有一个类处理所有异常(MVC)?

时间:2016-06-15 23:43:06

标签: java model-view-controller

我正在编写一个完全遵循MVC设计模式的程序,目前我有很多方法可以抛出异常,而且我处理的很差。

我想在控制器中添加一个名为exceptionHandler的类,其中包含public void receiveRuntimeException(String message)receiveAnotherTypeOfException(...)等方法。

然后给大多数类(特别是视图中的那些)引用exceptionHandler,然后每当方法抛出异常时,做类似的事情

try{
    methodThatWillThrowAwfulException()
}catch(AwfulException e){
    exceptionHandler.receiveAwfulException("methodThatWillThrowAwfulException threw awful exception")
}

这是一个好习惯吗?如果没有,如何在MVC中处理异常?

2 个答案:

答案 0 :(得分:0)

Spring具有@ControllerAdvice的概念,您可以在其中注释一个类来处理各个方面,例如错误处理(因此使用@ExceptionHandler注释)。你自己可能不会使用Spring;这是一个非常受欢迎的MVC框架采用的模式。

在这种情况下,您应该努力使尽可能多的方法来处理尽可能多的例外。不要创建一个方法来处理omni-exception,因为你希望你的错误尽可能具有描述性。

答案 1 :(得分:0)

你想处理错误?一个控制器。 commonExceptionHandler?

(context.xml中)

<!-- Exception Resolver -->
<beans:bean
    class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <beans:property name="defaultErrorView" value="exception/default"></beans:property>
    <beans:property name="warnLogCategory" value="log"></beans:property>
</beans:bean>

(web.xml)中

<!-- error -->
<error-page>
    <error-code>301</error-code>
    <location>/exception/default.html</location>
</error-page>
<error-page>
    <error-code>304</error-code>
    <location>/exception/default.html</location>
</error-page>
<error-page>
    <error-code>307</error-code>
    <location>/exception/default.html</location>
</error-page>
<error-page>
    <error-code>401</error-code>
    <location>/exception/default.html</location>
</error-page>
<error-page>
    <error-code>402</error-code>
    <location>/exception/default.html</location>
</error-page>
<error-page>
    <error-code>403</error-code>
    <location>/exception/default.html</location>
</error-page>
<error-page>
    <error-code>404</error-code>
    <location>/exception/default.html</location>
</error-page>
<error-page>
    <error-code>405</error-code>
    <location>/exception/default.html</location>
</error-page>
<error-page>
    <error-code>406</error-code>
    <location>/exception/default.html</location>
</error-page>
<error-page>
    <error-code>415</error-code>
    <location>/exception/default.html</location>
</error-page>
<error-page>
    <error-code>429</error-code>
    <location>/exception/default.html</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/exception/default.html</location>
</error-page>
<error-page>
    <error-code>501</error-code>
    <location>/exception/default.html</location>
</error-page>
<error-page>
    <error-code>503</error-code>
    <location>/exception/default.html</location>
</error-page>

(处理程序控制器)

@ControllerAdvice("you.project.package")
public class CommonExceptionHandler {

    private static final Logger logger = LoggerFactory.getLogger(CommonExceptionHandler.class);

    @ExceptionHandler(Exception.class)
    public ModelAndView defaultException(HttpServletRequest req, Exception exception){
        logger.error("Request: " + req.getRequestURL() + " raised " + exception);

        ModelAndView mav = new ModelAndView();
        mav.setViewName("exception/default");

        return mav;
    }
}

您可以在谷歌搜索。

尝试。在你来显示错误和代码之后。