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     } 

使用这种异常,需要在你执行的某个方法前抛出,然后在此方法进行异常处理,最后返回视图之类的。。。

    

  

 

 

 

    

posted @ 2013-05-13 11:59  全力以赴001  阅读(1994)  评论(1编辑  收藏  举报