1 0

Java错误代码及异常处理5

现在有个项目,遇到错误代码和异常处理方面的问题,请教各位高手。

背景:项目对外提供服务,这些服务是对很多外部系统提供服务的封装,每个外部系统有自己的错误代码,没有统一的规范。有些外部系统自己规范都不统一,有的时候返回错误代码,有的时候返回错误信息,有的时候错误代码和错误信息在一起。

目前可选的解决方案:
一、直接使用外系统错误代码
方法:直接使用外系统错误代码
问题:混乱,错误代码可能重复,排除该方法

二、使用统一的错误代码
方法:对外部系统的错误代码重新编排,按照模块进行分类,没有错误代码的错误当做未知错误。
问题:需要维护一个错误代码列表及映射关系,对于外部系统错误不规范的情况,需要有专门的代码进行处理


三、使用异常,统一当做checked exception处理
方法:继承Exception
问题:不符合异常处理最佳实践,有些应该是RuntimeException的也被强制要求捕获了

四、使用异常,根据外系统错误类型区分是checked exception还是unchecked exception
方法:根据外部系统类型,区分哪些是程序逻辑问题(继承RuntimeException),哪些是系统问题(继承Exception),映射成不同的异常类型
问题:外系统错误说明可能有误,导致映射到异常时类型不准确

===========================
针对这种情况,各位觉得应该使用哪种方式处理比较好,另外,对于异常的类层次结构实践经验不多,只是简单看过Spring的异常类设计,有哪些好的书或资料可以学习一下。

问题补充:补充一下,第一和第二种方法,是指建一个统一的自定义异常,然后把错误代码和错误信息放在异常里。
2013年4月21日 11:52

3个答案 按时间排序 按投票排序

0 0

采纳的答案

1、如果你这个系统是新系统/或者以后会有更多的子系统依赖 建议还是规范起来
1.1、如果对外提供的是jar包直接抛异常 没关系
1.2、如果走如http/webservice 提供一个异常到错误码的映射(比如直接写到异常里) 这个是标准的 以后的标准
1.3、对于遗留系统 提供一个转换处理器(如spring对jdbc、hibernate等的都转换为DataAccessException)
  如果外部系统能改造的话 建议沟通下一起改造下  否则就要他们提供当前系统的错误码 然后联调(可能存在bug 很正常的  所以要全面测试) 
1.4、考虑下spring的NestedException 嵌套异常 来存储原始异常
1.5、如果可以放弃checkedException 如web系统都会有一个异常解析器 出错了 会交给他 所以unchecked即可

2013年4月21日 12:21
0 0

像这种类似接口机性质的系统(如:自己提供若干服务,供外部N多个系统调用),肯定需要对错误代码进行统一。目前很多这种类型的项目,如淘宝的TOP、开源rest服务框架ROP等等。

首先自己系统内部要处理各种异常,从database->orm-service-(webservice/rest service/http service……),当然底层的异常需要由上层来捕获。因为上层需要根据异常类型映射到对应的错误代码,再返回到对应的外部系统调用结果。

如果按照各个外部系统的错误码,那你同一个服务供若干外系统调用时,还要根据外系统类型,再返回对应的错误码?那么一个新的系统需要调用已有服务时,那不是要更改接口代码(如果扩展性做的好,就增加外系统对应的错误码配置字典)。但是这样,对后期的维护还是麻烦。

有时候,做接口,不仅仅是技术问题,还要看本系统的重要程度,如果是核心系统,就应该强势起来,不能被外系统牵着鼻子走,因为被外系统牵着鼻子走,到时候核心系统出问题,客户只会怪核心系统设计不好等等……

2013年4月21日 12:47
0 0

“简单是最好”,我推荐第二种。

1. 自定义异常,继承自RuntimeException。
2. 映射不一定需要。我觉得外系统id + 错误代码(没有时自己定制)足以简单区分异常。

【1】里面可能需要定义两个,业务异常和系统异常。但无论哪种都是RuntimeException。
(是否runtime这个有争论,我个人推荐全部runtime,无须强制捕捉。)

总之,
- 继承层数少些
- 结构简单些。
- 无须强制 <- 个人意见

最后,统一处理所有异常的地方可能需要映射,不同异常对应不同处理方式。
如果没有这种需求,也无须搞映射。能区分即可。

“如无必要,勿增实体”——奥卡姆剃刀定律

2013年4月21日 12:41

相关推荐

    java内存机制及异常处理

    Java内存机制是Java虚拟机(JVM)的关键组成部分,它管理着程序运行时的数据存储。在Java中,内存主要分为以下几个区域: ...正确理解和运用Java内存机制以及异常处理机制对于开发健壮、高效的Java应用程序至关重要。

    Java第10章 异常处理含源代码

    Java使用异常处理来中断正常的代码流程,转而执行特定的错误处理代码。异常处理的核心概念包括异常类、捕获和抛出异常。 1. **异常类**:Java中的异常都是`java.lang.Throwable`类的子类。常见的异常类有`Exception...

    java实验报告4-异常处理

    Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误时能够优雅地运行,而不是突然崩溃。本实验报告“java实验报告4-异常处理”旨在帮助初学者掌握Java中的异常处理机制,以及如何利用log4j进行日志...

    Java常见工具类及异常处理

    Java常见工具类及异常处理 在 Java 编程中,异常处理是一个非常重要的概念。异常是指在程序执行过程中出现的非正常情况,可能会导致程序终止或崩溃。Java 提供了一个完善的异常处理机制,允许开发者捕获和处理异常...

    java 异常处理 代码实例

    Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误时能够优雅地运行,而不是突然崩溃。本篇文章将深入探讨Java异常处理的概念、机制以及如何通过代码实例进行有效的异常管理。 Java异常处理的核心...

    java全局异常统一处理

    在Java异常处理机制中,当一个方法抛出异常时,该异常将被传递到调用该方法的方法中,直到找到能够处理该异常的代码为止。在这个过程中,Java使用了try-catch语句块来捕获和处理异常。通过在一个或多个catch语句块中...

    java异常处理例题代码.pdf

    异常处理是Java语言中一个非常重要的部分,它能够帮助程序在遇到错误情况时仍然可以正常运行或者优雅地退出。这些程序通过各种异常类的使用,例如ArrayIndexOutOfBoundsException、ArithmeticException和...

    C++ Java异常处理比较

    Java的异常处理机制专注于处理运行时错误,通过面向对象的方式来进行异常的捕获和处理。 在Java中,异常是通过`throw`语句引发的,这可以是由于程序内部的错误(如Java虚拟机异常)或编程错误(如空指针、数组越界...

    java程序中的异常处理

    在Java编程中,异常处理是一种用于处理程序运行过程中可能出现的错误或意外情况的重要机制。它可以帮助开发者更好地控制程序流,确保程序即使在遇到错误的情况下也能优雅地进行处理或者终止。 #### 核心概念解析 1...

    java 异常处理ppt

    Java异常处理是编程中至关重要的一个环节,它允许开发者优雅地处理程序运行时可能出现的错误,确保程序的健壮性和稳定性。Java中的异常处理机制基于一个独特的概念——异常(Exception),这是一种表示程序运行中...

    java程序错误类型及异常处理.doc

    Java程序的错误类型和异常处理是编程过程中必不可少的环节,主要分为语法错误、运行错误和逻辑错误三类。下面将详细阐述这三种错误及其处理方式。 1. 语法错误 语法错误是最直观的错误类型,它发生在编程时输入的...

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

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

    JAVA范例 四)异常处理---编译时异常、运行时异常

    当我们谈论"源码"时,这可能意味着我们要查看和理解Java代码中的异常处理实现。在Struts2框架中,异常处理是一个关键环节。Struts2提供了一套完整的异常处理机制,允许开发者自定义全局或特定动作的异常处理策略。...

    java试验报告之异常处理程序设计

    Java的异常处理机制提高了程序的健壮性,因为它允许程序员对可能出错的代码进行封装,而不必在每个可能的错误点都编写冗余的检查代码。此外,通过使用`finally`块,即使在异常发生时也可以确保必要的清理操作(如...

    高效的java异常处理框架高效的java异常处理框架高效的java异常处理框架

    Java 异常处理是 Java 语言中的一个关键组件,用于处理程序运行过程中的错误和异常。在 Java 中,异常处理框架是 Java 语言健壮性的一个重要体现。本文将从 Java 异常的基本概念和语法开始,讲述 Java 异常处理的...

    Java异常处理体系

    在Java编程语言中,异常处理是一项关键特性,用于在程序执行过程中捕获并处理错误情况。这个主题,"Java异常处理体系",涉及到Java如何优雅地处理程序运行时的异常,确保程序的健壮性和稳定性。这篇博文链接(已提供...

    实验五 Java异常处理实验.docx

    Java 异常处理是 Java 语言中的一种错误处理机制,用于捕获和处理程序执行过程中出现的异常情况。异常是指程序执行过程中出现的非正常情况,例如除零错误、数组下标越界等。 实验目的 本实验的目的是让学生熟悉 ...

    Java\课件\JAVA的异常处理机制.ppt

    Java的异常处理机制是Java编程中至关重要的一部分,它主要用于处理程序在运行时可能出现的各种错误和异常情况。这一机制使得开发者能够优雅地处理错误,而不会让整个程序崩溃。以下是关于Java异常处理机制的详细说明...

    Java Web开发异常处理方式及AOP技术

    在Java Web开发中,异常处理是一项至关重要的任务,它确保了程序在遇到错误时能够优雅地处理并提供有用的反馈信息,而不是突然崩溃。本主题将深入探讨Java Web开发中的异常处理方式以及Aspect-Oriented Programming...

Global site tag (gtag.js) - Google Analytics