我正在编写一个完全遵循MVC设计模式的程序,目前我有很多方法可以抛出异常,而且我处理的很差。
我想在控制器中添加一个名为exceptionHandler
的类,其中包含public void receiveRuntimeException(String message)
,receiveAnotherTypeOfException(...)
等方法。
然后给大多数类(特别是视图中的那些)引用exceptionHandler
,然后每当方法抛出异常时,做类似的事情
try{
methodThatWillThrowAwfulException()
}catch(AwfulException e){
exceptionHandler.receiveAwfulException("methodThatWillThrowAwfulException threw awful exception")
}
这是一个好习惯吗?如果没有,如何在MVC中处理异常?
答案 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;
}
}
您可以在谷歌搜索。
尝试。在你来显示错误和代码之后。