`

项目中统一异常处理设计与实现

阅读更多
1.统一异常处理

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 自定义异常处理器流程

daoserviceaction所抛出的异常进行统一处理,在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中配置:

前端控制器知道全局异常处理器idhandlerExceptionResolver

 

 

<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

屏蔽自动注册异常处理器,固定使用beanidhandlerExceptionResolver的异常处理器。

 

 

1.2.4 统一异常处理器使用

 

系统中所有异常由全局异常处理器处理。

Dao方法向外抛出系统自定义异常。

Service方法向外抛出系统自定义异常。

Action方法向外抛出系统自定义异常。

1.2.5 统一异常处理器测试

 

1、 action的提交方法中发生异常,由全局异常处理器进行处理。

 

2、在action返回jsp方法中发生异常,由全局异常处理器进行处理。

转载请注明:http://www.xujin.org

  • 大小: 6.7 KB
  • 大小: 14.7 KB
  • 大小: 16 KB
  • 大小: 7 KB
  • 大小: 20.9 KB
  • 大小: 7.8 KB
分享到:
评论

相关推荐

    J2EE项目中统一异常处理源码

    综上所述,"J2EE项目中统一异常处理源码"通过自定义异常分析和统一处理策略,实现了对14类异常的精细化管理,提升了项目的健壮性和用户体验。`ExceptionHandler.java`作为核心处理类,包含了捕获、分析和响应异常的...

    统一异常处理组件resultex

    "统一异常处理组件ResultEx"就是为了解决这个问题而设计的。这个组件的核心目标是提供一种可插拔的机制,使得开发者能够在整个应用程序中方便地管理和处理各种可能出现的异常情况,从而提高代码的可维护性和用户体验...

    基于JQuery的用户统一认证系统的设计与实现

    本文将深入探讨基于JQuery实现的用户统一认证系统的设计与实现,这是一项重要的毕业设计课题,旨在提高Web应用的安全性和用户体验。 首先,我们需要理解JQuery的核心概念。JQuery是一个轻量级、高性能的JavaScript...

    全局异常处理的实现

    全局异常处理是软件开发中的一个重要概念,特别是在大型项目或复杂系统中,确保程序在遇到错误时能够优雅地处理并提供反馈至关重要。这篇文章将深入探讨全局异常处理的实现,包括其重要性、常见方法以及如何在不同...

    Java项目中全局异常处理实战.zip

    - 提供的源码实例展示了如何在实际项目中应用上述原则,包括`GlobalExceptionHandler`类的实现、自定义异常类的设计以及异常处理逻辑的测试。 10. **最佳实践** - 避免在`catch`块中使用`return null`或简单的`...

    基于i18n国际化微服务统一处理错误码

    4. **异常处理**:使用SpringBoot的异常处理机制,如`@ExceptionHandler`注解或全局异常处理器,捕获并转换异常为带有错误码的响应。 5. **统一的错误响应格式**:设计一个统一的JSON格式来封装错误信息,包括错误...

    J2EE项目异常处理的几种方案

    综上所述,J2EE项目中的异常处理策略应包括多层面的设计与实施,从代码层面的异常捕获,到框架层面的拦截器和全局异常配置,再到异常层次结构的构建以及日志记录与监控的完善,每一步都是提升系统稳定性与可维护性的...

    接口设计项目设计及具体实现

    5. **错误处理**:接口设计应考虑到可能出现的错误情况,提供合理的错误码或异常处理机制,以便调用方能够优雅地处理错误。 6. **安全考虑**:接口设计需要考虑安全性,如认证、授权和加密,防止未授权访问和数据...

    利用java filter 实现业务异常拦截源码

    我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理机制,我们在业务层会跑出我们遇到业务处理异常 ,然后交由...

    SEH异常处理.rar

    通过这个压缩包中的易语言源码,你可以深入学习如何在易语言环境中实现SEH异常处理,理解其原理,并应用到实际项目中,提高代码的稳定性和可靠性。同时,对于理解Windows底层的异常处理机制,也有很大的帮助。

    PHP中异常处理的一些方法整理

    SPL新增的异常类型允许开发者在自己的代码中使用标准的异常处理方式,同时又能适应特定的异常处理需求。 在设计异常时,PHP开发者通常遵循一些最佳实践,比如根据ZendFramework或PEAR标准,开发自定义的异常基类。...

    STS创建Spring Boot项目实战(Rest接口、数据库、用户认证、分布式Token JWT、Redis操作、日志和统一异常处理)

    在本实战教程中,我们将深入探讨如何使用Spring Tool Suite (STS) 创建一个全面的Spring Boot应用,涵盖了多个关键领域,包括RESTful接口、数据库交互、用户认证、分布式Token的实现(JWT)、Redis缓存操作、日志...

    微服务请求日志统一处理方案

    在微服务架构中,日志的统一管理与处理是一个重要的课题。这有助于提高系统的可维护性,便于故障排查和性能优化。"微服务请求日志统一处理方案"旨在解决这个问题,通过创建一个独立的日志组件,实现对各个微服务请求...

    音乐推荐系统的设计与实现.zip

    5. 实现与开发:项目中的“代码”文件可能包含了系统的实现代码,涉及数据处理脚本、推荐算法模型以及交互界面的编写。这部分内容可能使用Python、Java或R语言等编程语言,结合机器学习库(如scikit-learn、...

    pring异常处理共5页.pdf.zip

    在Spring中,异常处理主要是通过AOP(面向切面编程)来实现的,它允许我们在不修改原有业务代码的情况下,对程序运行过程中的异常进行统一管理。 【描述】:“Spring异常处理共5页.pdf.zip” 描述中的“共5页”...

    统一登录平台设计方案1

    【统一登录平台设计方案1】 统一登录平台是一种在企业或组织内部实现多个子系统单点登录(Single Sign-...在实际应用中,还需要考虑如安全策略、权限管理、异常处理等多方面因素,以构建更完善的企业级统一登录平台。

    基于JAVA+EE平台的项目管理系统的设计与实现

    ### 基于JAVA+EE平台的项目管理系统的设计与实现 #### 概述 随着信息技术的快速发展,软件项目管理已成为企业提升竞争力的关键因素之一。基于JAVA+EE平台的项目管理系统旨在利用先进的技术手段来提高软件项目的管理...

    Java平台统一异常框架归类.pdf

    总的来说,Java平台的统一异常框架设计旨在提供一个健壮、稳定且易于使用的异常处理机制,它通过异常的层次结构、国际化和拦截器,有效地管理和呈现应用程序可能出现的各种异常情况,提高了系统的可维护性和用户体验...

    Struts1异常处理

    在Struts1中,异常处理主要通过以下几种方式实现: 1. **全局异常处理**:Struts1允许开发者在struts-config.xml配置文件中定义全局的异常处理。通过`&lt;global-exceptions&gt;`标签,可以指定当特定的异常类型发生时,...

    Java EE项目中的异常处理总结(一篇不得不看的文章)

    在Java EE项目中,为了实现统一的异常处理,通常会设计一个异常处理框架。这个框架可能包括全局的异常拦截器,用于捕获未处理的异常,然后根据异常类型和业务需求进行处理,如记录日志、向用户显示友好的错误信息,...

Global site tag (gtag.js) - Google Analytics