这几天在完成一些基本添删改查功能,说实话这个还是比struts2要烦很多呀,因为struts2中有validate功能,使用契约模式,凡是以validateXXX(其中XXX是方法名),在执行XXX前会先执行,这样等于是个pre-check,并且还能起到一些参数的初始化能力。
可惜在springmvc中,只有一个@initbinder,他如同一个全局函数,与WebDataBinder绑定。不过他也有个毛病,就是在我的requestMapping方法参数中必须添加一个entity类型的,才会触发initbinder的函数。
回来说下,这个springmvc基本上可以把异常分成两类:
- 一类是有用户自己在try catch块中定义的
对于,这类spring到时提供了很好的解决方法,那就是
/**
* 文章id不正确
* @param bindingResult
* @param defaultPage
* @return
*/
@ExceptionHandler(ObjectNotFoundException.class)
public ModelAndView handleNotFoundEx(BindingResult bindingResult, String defaultPage) {
if(bindingResult == null) return handleErrors(defaultPage);
return handleErrors(bindingResult, defaultPage);
}
@ExceptionHandler这个还是挺好额,具体的spring自带的pdf中有说明,不过可惜,他不能支持如同:
@ExceptionHandler({xxx.class,xxx.class})
- 一类是由spring内置的
比如在用@PathVariable Long id时,如果id无法转换为long就会抛出一个typemis什么spring内置exception,这个实在很早很早还没有进入你的controller时就产生了,这时他调用的是在xxx-servlet.xml文件中定义的exception handler来处理。
<!-- Mapping exception to the handler view -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- to /commons/error.jsp -->
<property name="defaultErrorView" value="/commons/error"/>
<property name="exceptionMappings">
<props>
</props>
</property>
</bean>
这里的
exceptionMappings是能让你对应不同的exception,来进行处理的。不过具体代码还没有仔细看,spring自带的好像写得也不是很详细了
只好自己研究了。呵呵