1.1 统一异常结果类型
Java中进行异常处理:
一类是可预知的异常,程序员在编码时,主动抛出的异常,为了给用户操作提示,提前检查代码中可能存在异常。
通过开发中,采用自定义的异常类,每个异常类表示每一类异常信息。类需要继承Exception类。
本系统采用统一异常类,提供一个属性标识异常类。
另一类是不可预知异常,就是runtimeException异常,通过提高代码编写质量来避免此类异常,也可通过后期测试 人员进行系统功能测试对runtime异常进行避免。
如何使用异常类?
在service中要抛出此异常类。
在action或者Controller中捕获系统自定义异常,解析系统自定义异常。
解析系统自定义异常过程:
如果抛出的ExceptionResultInfo系统自定义异常,直接获取该异常信息即可。
如果不是抛出的ExceptionResultInfo系统自定义异常,重新构造一个“未知错误异常!”。
将异常信息或成功信息返回到页面:
统一使用类SubmitResultInfo,提交类的方法统一使用该类型作为返回值类型。
由于action中所有的提交类方法统一返回SubmitResultInfo,所以在页面要统一使用一个方法解析json结果。
修改回调函数:
function sysusersave_callback(data){
message_alert(data);
}
1.2 统一异常处理器
Springmvc提供统一处理器机制,springmvc的前端控制器在调用适配器,去调用action,过程中如果发生异常,前端控制器交给异常处理器进行异常处理。
前端控制器源代码:
1.2.1 自定义异常处理器流程
对dao、service及action所抛出的异常进行统一处理,在action中就不需要添加try{}catch{}捕获的代码。
1.2.2 自定义异常处理器编写
自定义全局异常处理器,实现HandlerExceptionResolver接口
public class ExceptionResolverCustom implements HandlerExceptionResolver {
// json转换器
// 将异常信息转json
private HttpMessageConverter<ExceptionResultInfo> jsonMessageConverter;
// 前端控制器调用此方法执行异常处理
// handler,执行的action类就包装了一个方法(对应url的方法)
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
// 输出 异常信息
ex.printStackTrace();
// 转成springmvc底层对象(就是对action方法的封装对象,只有一个方法)
HandlerMethod handlerMethod = (HandlerMethod) handler;
// 取出方法
Method method = handlerMethod.getMethod();
// 判断方法是否返回json
// 只要方法上有responsebody注解表示返回json
// 查询method是否有responsebody注解
ResponseBody responseBody = AnnotationUtils.findAnnotation(method,
ResponseBody.class);
if (responseBody != null) {
// 将异常信息转json输出
return this.resolveJsonException(request, response, handlerMethod,
ex);
}
// 这里说明action返回的是jsp页面
// 解析异常
ExceptionResultInfo exceptionResultInfo = resolveExceptionCustom(ex);
// 将异常信息在异常页面显示
request.setAttribute("exceptionResultInfo",
exceptionResultInfo.getResultInfo());
// 转向错误页面
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("exceptionResultInfo",
exceptionResultInfo.getResultInfo());
modelAndView.setViewName("/base/error");// 逻辑视图名
return modelAndView;
}
// 异常信息解析方法
private ExceptionResultInfo resolveExceptionCustom(Exception ex) {
ResultInfo resultInfo = null;
if (ex instanceof ExceptionResultInfo) {
// 抛出的是系统自定义异常
resultInfo = ((ExceptionResultInfo) ex).getResultInfo();
} else {
// 重新构造“未知错误”异常
resultInfo = new ResultInfo();
resultInfo.setType(ResultInfo.TYPE_RESULT_FAIL);
resultInfo.setMessage("未知错误!");
}
return new ExceptionResultInfo(resultInfo);
}
// 将异常信息转json输出
private ModelAndView resolveJsonException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
// 解析异常
ExceptionResultInfo exceptionResultInfo = resolveExceptionCustom(ex);
HttpOutputMessage outputMessage = new ServletServerHttpResponse(response);
try {
//将exceptionResultInfo对象转成json输出
jsonMessageConverter.write(exceptionResultInfo, MediaType.APPLICATION_JSON, outputMessage);
} catch (HttpMessageNotWritableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return new ModelAndView();
}
public HttpMessageConverter<ExceptionResultInfo> getJsonMessageConverter() {
return jsonMessageConverter;
}
public void setJsonMessageConverter(
HttpMessageConverter<ExceptionResultInfo> jsonMessageConverter) {
this.jsonMessageConverter = jsonMessageConverter;
}
}
1.2.3 统一异常处理器配置
在springmvc.xml配置统一异常处理器。
在web.xml中配置:
前端控制器知道全局异常处理器id为handlerExceptionResolver
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
<init-param>
<param-name>detectAllHandlerExceptionResolvers</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
detectAllHandlerExceptionResolvers:
屏蔽自动注册异常处理器,固定使用bean的id为handlerExceptionResolver的异常处理器。
1.2.4 统一异常处理器使用
系统中所有异常由全局异常处理器处理。
Dao方法向外抛出系统自定义异常。
Service方法向外抛出系统自定义异常。
Action方法向外抛出系统自定义异常。
1.2.5 统一异常处理器测试
1、 在action的提交方法中发生异常,由全局异常处理器进行处理。
2、在action返回jsp方法中发生异常,由全局异常处理器进行处理。
转载请注明:http://www.xujin.org
相关推荐
我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理机制,我们在业务层会跑出我们遇到业务处理异常 ,然后交由...
# OnlineExamSystem 基于SSM框架开发的一款在线考试系统 项目简介: 前端框架使用的主要是easyui和jquery 后端框架使用的主要是Spring、SpringMVC、...使用SpringMVC提供的全局异常处理器进行统一异常处理。
为了帮助大家更好地完成毕业设计,我们特地整理了一系列Java毕业设计项目参考资源,包括源代码、MD文档、笔记等等,希望能对您的学习与研究提供有力支持。 项目源代码:涵盖了多个Java毕业设计项目的完整代码,包括...
技术实现事务管理、服务日志、统一异常处理,在远程服务调用中使用RPC Context实现上下文管理,持久化框架采用Hibernate、Mybatis双框架兼容设计,使用数据访问代理服务,实现分库分表环境下的透明数据访问。...
- 通过@ControllerAdvice注解实现拦截器,利用@ExceptionHandler注解捕捉所有异常,进行统一处理 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通...
AOP(面向切面编程)设计,实现 参数校验层 & 异常统一处理层 Ubuntu 16.04上 Nginx + Gunicorn + Pipenv部署 内置 用户管理:提供用户的相关配置 权限组(角色)管理:接口权限分配和菜单权限分配 菜单管理:实现后端...
实例002 统一窗体中控件的字体设置 实例003 设置程序代码行号 实例004 通过“格式”菜单布局窗体 实例005 为项目添加dll文件引用 实例006 为项目添加已有类 实例007 为项目添加第三方控件 实例008 为项目添加已有...
基于 Java Web 项目的 SpringBoot 框架初始化模板,该模板整合了常用的框架,保证大家在此基础上能够快速开发自己的项目,该模板针对于后端启动开发小而精,本项目会由作者持续更新。 业务特性: 1、使用 Undertow ...
毕业设计,基于SpringBoot+Vue+MySql开发的行者外卖管理系统网站,内含Java完整源代码,数据库脚本 行者外卖管理系统网站,是一个面向外卖管理后台的平台,...通过AOP技术加入了全局异常处理器,对异常进行统一处理
13.1.1统一的数据访问异常 260 13.1.2通用的数据访问模板及抽象支持类 261 13.2spring的jdbc 262 13.2.1为什么需要jdbctemplate 262 13.2.2通过jdbcdaosupport使用jdbctemplate 263 13.2.3jdbctemplate提供的...
和控制,预测性/主动性处理突发或者异常事件,同时改善和提高建筑管理和运 行效率,降低能耗,提高舒适度,增强用户的使用体验。 IMCenter 智能化集成系统的集成模式:应采用分布式集成模式,即三层集 成模式:设备...
基于SpringBoot 的图书管理系统,主要包括系统管理、图书管理、借阅者管理三部分 项目结构的一些简单说明...│ │ │ ├─exception 全局统一异常处理 │ │ │ ├─interceptor 过滤接口 等等可以看主要文章有具体展示
统一的异常处理(应用层几乎不需要处理自己写异常处理代码) 数据有效性验证(Asp.NET MVC只能做到Action方法的参数验证,ABP实现了Application层方法的参数有效性验证) 通过Application Services自动创建Web Api层...
全局异常处理 接口统一结果返回 一键生成数据库设计文档 大批量数据插入数据库测试 根据word模板导出word文件或者转成PDF导出 根据freemarker模板文件生成word文档 word文档转pdf文档 其他各分支代码功能说明如下: ...
服务器端采用Thinkphp5.0开发接口,服务器端采用了统一的自定义验证框架层和异常处理层,整个项目才用了面向对象的设计方法,以及面向切面编程AOP思想,是学习的精品资料! 【备注】 该项目代码主要针对计算机、自动...
既然分库了 分布式事务怎么处理,说到分布式事务 常见的解决方案有TCC/SAGA/消息队列最终一致性,在.NET生态中有基于消息队列实现的分布式事务 [CAP](https://github.com/dotnetcore/CAP) ,TCC和SAGA调研了很久没有...
后端使用了统一的返回结果、异常处理、使用拦截器进行登录校验与权限校验。编程风格良好。 基于springboot+vue的电商平台。本人本科毕业设计作品。 安装说明:1.先安装npm,具体百度一下教程。使用npm运行前端vue...
- 通过@ControllerAdvice注解实现拦截器,利用@ExceptionHandler注解捕捉所有异常,进行统一处理 - 为提升查询效率,在蘑菇学名字段上建立了索引 ## 1.1 总体设计 介绍了小程序的整体系统架构以及使用小程序进行...
* 统一异常处理 * 简单的普通用户登录注册 * 基于[JWT](https://www.jianshu.com/p/576dbf44b2ae)的接口权限认证 * 基于logback的生产环境日志按天滚动记录 * 常用基础方法抽象封装 > TODO * 集成swagger,生成API的...
例如,容易实现协议的设计。 Java EJB中有、无状态SessionBean的两个例子 两个例子,无状态SessionBean可会话Bean必须实现SessionBean,获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,计算利息等;...