SpringMVC 处理异常的4种方式

springmvc处理异常有三种方式:
1.在一个controller中定义一个方法,用@ExceptionHandler注解标注。( 优先级最高)

?

1
2
3
4
5
6
@ExceptionHandler
public ModelAndView handleException(Exception exception){
     ModelAndView mv = new ModelAndView( "error/500" );
     mv.addObject( "ex" ,exception);
     return mv;
}

或者

?

1
2
3
4
@ExceptionHandler
public String handleException(Exception exception){
     return "error/500" ;
}

2.全局异常设置( 优先级次之)

?

1
2
3
4
5
6
7
8
9
10
<!-- 将Controller抛出的异常转到特定View,异常映射处理器 -->
<bean class = "org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" >
     <!-- 定义异常处理页面用来获取异常信息的变量名,默认名为exception -->
     <!--<property name= "exceptionAttribute" value= "ex" ></property>-->
     <property name= "exceptionMappings" >
         <props>
             <prop key= "java.lang.Throwable" >error/ 500 </prop>
         </props>
     </property>
</bean>

3.自定义异常处理( 优先级次之)

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
     System.out.println( "自定义异常处理器" );
     logger = LoggerFactory.getLogger(ex.getClass());
     ResponseStatus responseStatus = AnnotationUtils.getAnnotation(ex.getClass(), ResponseStatus. class );
     ModelAndView modelAndView = new ModelAndView( "error/500" );
     //自定义的异常
     if (responseStatus != null ) {
         modelAndView.setViewName( "error/" + responseStatus.value().value());
     } else {
         //其他异常,做一些其他的处理,如发送错误报警邮件,记录日志
         logger.error(ex.getMessage(), ex);
     }
     return modelAndView;
}

4.自定义一个异常类,继承RunTimeException( 优先级最低)

?

1
2
3
4
@ResponseStatus (value = HttpStatus.NOT_FOUND,reason = "No such resource" )
public class NotFoundException extends RuntimeException {
 
}

当抛出我们自定义的异常时,就会构造出相应的状态码,一般我们还是设置SimpleMappingExceptionResolver,来进行统一跳转到错误页面。

最佳实践:还是用全局的SimpleMappingExceptionResolver最好,在jsp里面写日志,当需要进行细粒度的控制时,还是自定义异常解析器为好,其他的自我感觉不好用!如有不正确的,欢迎指正!


获取【下载地址】   

转载于:https://my.oschina.net/u/2546233/blog/540370

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值