springmvc统一的异常处理方法
小编初接触springmvc,终结了一些皮毛东西,跟大家一同分享一下。如有不足之处,请多多评论,指教...
我近次在做项目的过程中遇到了springmvc的异常...话说try-catch--解决很容易,事实这的确很方便,或者在web.xml中配置一些404、500、503...什么的异常错误,这也是需要的。但是呢,有时候,不同的功能呢的抛出了相同的异常,而此时我们却需要相同的页面的异常错误页面,这时候全局异常就是一个好东东了。
我目前所了解的有两种方法配置全局异常,一种是在spring-mvc.xml文件下配置,一种用一个异常的类来配置。
第一种:使用xml配置来配置,通过Spring mvc框架提供的SimpleMappingExceptionResolver来集中处理,该类可以捕获所有控制器抛出的异常,并将它映射到配置的视图中例子如下:
1 <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 3 <property name="defaultErrorView"> 4 <value>failure</value> 5 </property> 6 <property name="exceptionMappings"> 7 <props> 8 <!--key表示你要抛出的异常情况,value代表异常视图--> 9 <prop key="java.sql.SQLException">showDBError</prop> 10 <prop key="java.lang.RuntimeException">showError</prop> 11 </props> 12 </property> 13 </bean>
第二种:直接实现自己的HandlerExceptionResolver
代码如下:
1 import javax.servlet.http.HttpServletRequest; 2 import javax.servlet.http.HttpServletResponse; 3 4 import org.springframework.web.servlet.HandlerExceptionResolver; 5 import org.springframework.web.servlet.ModelAndView; 6 7 public class ExceptionHandler implements HandlerExceptionResolver { 8 9 @Override 10 public ModelAndView resolveException(HttpServletRequest request, 11 HttpServletResponse response, Object handler, Exception ex) { 12 if(ex instanceof org.springframework.web.multipart.MaxUploadSizeExceededException){ 13 //这里就是跳转的视图 14 return new ModelAndView("upLoad"); 15 } 16 if(ex instanceof java.io.FileNotFoundException){ 17 18 return new ModelAndView("exception"); 19 } 20 21 } 22 23 }
然后需要在spring-mvc.xml中配置自己定义的异常:
代码如下:
1 <bean id="exceptionResolver" class="com.tiantian.xxx.web.handler.ExceptionHandler"/>
以上就是springmvc中全局异常的两种处理方法。
有时候,我们需要在一个类中处理自己当前类的某种异常,但是又要统一处理,这种情况要怎么做了。。。
哈,我找度娘找一下,找到了解决方案...
这种方法使用@ExceptionHandler进行处理
例子如下:
1 @ExceptionHandler(Exception.class) 2 public @ResponseBody String handleException(Exception ex,HttpServletRequest request,HttpSession session) { 3 if(ex instanceof org.springframework.web.multipart.MaxUploadSizeExceededException){ 4 request.setAttribute("error", "文件超过长度"); 5 return "{'msg':'您上上传的文件过大,上传文件最大不能超过5兆'}"; 6 } 7 if(ex instanceof java.io.FileNotFoundException){ 8 9 return "您下载的文件不存在,请定期维护服务器!"; 10 } 11 //这是错误页面 12 return "error"; 13 }
使用这种异常,需要在你执行的某个方法前抛出,然后在此方法进行异常处理,最后返回视图之类的。。。