SpringMVC 处理异常的4种方式
2024-10-19 01:28:29
springmvc处理异常有三种方式: 1.在一个controller中定义一个方法,用@ExceptionHandler注解标注。(优先级最高)
@ExceptionHandler
public
ModelAndView handleException(Exception exception){
ModelAndView mv =
new
ModelAndView(
"error/500"
);
mv.addObject(
"ex"
,exception);
return
mv;
}
@ExceptionHandler
public
String handleException(Exception exception){
return
"error/500"
;
}
2.全局异常设置(下载地址 优先级次之)
<!-- 将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.自定义异常处理(下载地址 优先级次之)
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(优先级最低)
@ResponseStatus
(value = HttpStatus.NOT_FOUND,reason =
"No such resource"
)
public
class
NotFoundException
extends
RuntimeException {
}
当抛出我们自定义的异常时,就会构造出相应的状态码,一般我们还是设置SimpleMappingExceptionResolver,来进行统一跳转到错误页面。
最佳实践:还是用全局的SimpleMappingExceptionResolver最好,在jsp里面写日志,当需要进行细粒度的控制时,还是自定义异常解析器为好,其他的自我感觉不好用!如有不正确的,欢迎指正!
最新文章
- 两种方式实现java生成Excel
- Why AlloyFinger is so much smaller than hammerjs?
- Linux系统程序的运行级别
- PhotoShop常用快捷键
- PLSQL查询表是否被锁定(转)
- jQuery File Upload跨域上传
- HD 1003 Max Sum 的递归解法
- 半平面交模板(O(n*n)&;&; O(n*log(n))
- python操作postgresql数据库
- c语言数据结构:01背包问题-------动态规划
- Codevs 1010 过河卒
- openerp学习笔记 domain 增加扩展支持,例如支持 <;field name=";domain";>;[(&#39;type&#39;,&#39;=&#39;,&#39;get_user_ht_type()&#39;)]<;/field>;
- 如何进行Hadoop二次开发指导视频下载
- 腾讯面试题 腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?
- Uploadify 笔记分享 -- 2014年10月18日
- Quartz中文文档使用
- Swift 2.2 协议和代理
- Thread in Java
- day1 安装jdk8环境及第一个java程序
- [USACO07NOV]牛继电器Cow Relays