`
tanjiayqq
  • 浏览: 20404 次
文章分类
社区版块
存档分类
最新评论

设计接口时应该如何设计业务异常?

阅读更多
本文为原创,转载请注明

作者:cha1R(tanjiayqq)

Java里异常分两种,一种是检查(checked)的,一种是非检查(unchecked)的。

非检查以RuntimeException作为典型代表,它有一个特点就是我们可以不用捕捉它,如果没有捕捉它,它会一直往上抛直到main()方法处理,从而退出整个程序。注意如果是多线程的话,它并不会在main()方法终止程序,它会一直往上抛直到run()方法,而run()方法没有捕捉它的话会终止线程。

作为业务异常,是要反馈给用户的,所以我们不希望发生任何终止线程或者终止程序的代码。所以定义业务异常,我们一般使用检查的(checked)异常,定义一个异常非常简单,只需要写一个简单的类继承Exception即可。


public class InvalidAccount extends Exception{
    private static final long serialVersionUID = 1L;
    public InvalidAccount(){
        super("无效的账户");
    }
    public InvalidAccount(String msg){
        super(msg);
    }
}


那么我们一般什么时候需要设计业务异常呢?从我的经验来看,一般是设计业务接口的时候需要考虑这个接口会引发的业务异常。

假设设计一个登陆业务接口:

   
    /**
     * 登录
     * @param username 用户名
     * @param password 密码
     * @return 是否登录成功*/
    boolean login(String username,String password);

显然这个接口没有抛出异常,那么我们在还没实现接口的情况下,该如何考虑这个接口会发生什么样的异常?

其实我们很难全面地预测到它会发生一些什么,但是我们只需要考虑业务异常,业务异常是什么?即应用异常(如 权限不够等),这类异常需要通过前台反馈给用户,友好提示用户当前操作异常。

最大的特点就是,这个异常一定是由于当前接口调用不当(即用户操作不当,因为它接收的是用户输入的数据)造成的,那么最直接的思路就是从传入参数入手:

从登陆接口来看,传入的是用户名和密码,那么我们可以抛出一个“无效的用户”或者抛出“无效的用户名”和“无效的密码” 异常,其他的都不用抛出,因为它并不是由调用者引发的,在方法内部处理完就行。



再来看看一个我们一个项目的业务接口,评论微博:

    /**
     * 评论
     * @param userId     被评论的用户的ID
     * @param weiboId     被评论的微博的ID
     * @param content     评论内容
     * @return
     */
    boolean comment(String userId,String weiboId,String content);


定义这个方法的异常还算比较简单,从参数入手

userId:用户不存在异常

weiboId:微博不存在异常

content:内容包含敏感词汇异常,内容超出字数限制异常。 或直接用一个 内容不合法异常

这些都是可以抛出的异常。

但是有时候一条微博可能被设置为 “不可评论”,那么我们是不是要再跑出一个“不可评论异常”?这个完全不必抛出,因为我们抛出业务异常是用来反馈给用户看,从而让用户做出相应处理,但是这种不可改变的情况完全没必要交给用户决定如何处理,只需要在方法内部抛出RuntimeException,UI层统一捕获,提示一下即可。

最后介绍一个学习网站,比较适合初学者,视频略多:http://gz.itcast.cn/
分享到:
评论

相关推荐

    接口设计及界面设计

    在软件开发过程中,接口设计和界面设计是两个至关重要的环节,它们直接影响到用户的使用体验和系统的可维护性。本文将详细探讨这两个主题。 首先,我们来讨论“接口设计”。接口设计是软件系统中不同组件之间交互的...

    接口课程设计说明书(很全面)

    7. **异常处理**:接口设计时要考虑异常处理,明确哪些操作可能抛出异常,如何捕获并处理这些异常,以提高系统的健壮性。 在实际项目中,接口设计还涉及到多线程、并发、安全性等问题。例如,多线程环境下,接口的...

    软件项目模板-10 - 接口设计说明(IDD).zip

    在IT行业中,接口设计是软件开发过程中的关键环节,它涉及到不同系统、模块或组件之间的交互方式。"软件项目模板-10 - 接口设计说明(IDD).zip" 提供了一个详细的接口设计文档,这对于确保项目的高效协作和顺利实施至...

    API 接口 设计文档 模板

    ### API接口设计文档模板知识点详解 #### 一、概述 API(Application Programming Interface)接口设计文档是软件开发过程中不可或缺的一部分,它为开发者提供了清晰、准确的接口调用指南。一个良好的API文档应包括...

    Dubbo服务接口的设计原则.pptx

    Dubbo服务接口的设计原则还需要考虑到服务子系统的划分过程,服务接口设计需要与服务子系统的划分相互优化,确保服务接口的设计是基于业务场景的,能满足业务需求的同时也能满足技术指标的要求。 Dubbo服务接口的...

    API接口安全机制设计.pdf

    在深入分析这份关于API接口安全机制设计的文件内容之前,我们需要明确API网关的概念以及它在接口设计中扮演的角色。API网关是一个轻量级的Java HTTP接口组件,它的主要作用是将普通的Service方法转换成HTTP接口,...

    中国电信综合业务管理平台ISMP接口规范(RC1.0.1)-SP接口.pdf

    ISMP接口规范的制定基于一系列行业标准和企业内部规范,如《中国电信移动增值业务网络技术体制》、《中国电信综合业务管理平台ISMP规范总册》等,这些标准为ISMP接口的设计和实现提供了理论依据和技术指导。...

    业务协同接口说明doc文档合集整理.zip

    接口设计的好坏直接影响到系统的可扩展性和维护性。因此,对于开发者而言,理解并正确实现这些接口至关重要。 文档合集可能包括以下内容: 1. **接口规范**:定义了接口的请求格式(如HTTP方法、URL路径、请求头、...

    项目接口需求及设计说明文档(模板).doc

    - 设计部分会详细描述接口的实现细节,包括数据验证、事务管理、异常处理、日志记录等,确保接口设计的健壮性和可维护性。 6. **安全考虑** - 接口的安全性是至关重要的,可能会涵盖身份验证、授权、数据加密等...

    WebService接口设计

    ### WebService接口设计详解 在当今的互联网时代,Web服务作为一种关键的技术手段,被广泛应用于不同系统间的通信...在实际开发中,应根据项目需求灵活调整接口设计,持续优化,以满足不断变化的业务场景和技术挑战。

    营销远程实时费控应用集成接口设计说明书

    ### 营销远程实时费控应用集成接口设计说明书知识点解析 #### 1. 概述 - **目的**:本说明书旨在明确营销远程实时费控应用与其他相关系统的交互方式和信息交换格式,确保各系统间的信息传递准确无误。 #### 2. ...

    PROC程序设计和ORACLE调用接口

    PROC程序设计和Oracle调用接口是数据库应用开发中的一个重要领域,尤其在需要高效、低级访问Oracle数据库功能时。PROC,全称为Procedural Language/SQL,是Oracle提供的一种混合编程语言,它允许开发者在SQL语句中...

    系统对接接口设计.doc

    系统对接接口设计 在本文档中,我们将探讨系统对接接口设计的关键知识点。系统对接接口设计是指系统之间的数据交换和集成,旨在提供一个统一的接口,实现不同系统之间的数据交换和集成。 1. 数据交换接口 数据...

    互联网API接口幂等设计

    在互联网服务开发中,API接口的设计是至关重要的。API接口幂等性是一个核心概念,尤其在高并发、数据一致性的场景下,它扮演着举足轻重的角色。本文将深入探讨“互联网API接口幂等设计”及其在Java开发中的实现。 *...

    94丨项目实战二:设计实现一个通用的接口幂等框架(设计)1

    【接口幂等框架设计】 接口幂等框架设计的目标是确保...这涉及到对业务异常和系统异常的识别,以及如何在业务系统宕机时仍能保持幂等性。通过合理的设计和数据库策略,可以在保证幂等性的同时降低系统复杂性和风险。

    银行业务处理排号系统分析与设计

    4. 系统集成:与银行的其他系统(如CRM、核心业务系统)进行接口设计,确保数据的一致性。 5. 异常处理:考虑到网络问题、硬件故障等异常情况,设计相应的错误处理机制,保证系统的可用性。 四、未来扩展性 随着...

    Java异常处理终结篇——如何进行Java异常处理设计 - 望远的个人页面 - 开源中国社区1

    例如,将特定的业务异常继承自更通用的异常类。 7. **不要在catch块中仅打印堆栈跟踪**:虽然这对于调试很有帮助,但在生产环境中,应当提供有意义的信息或者采取相应的措施。 8. **处理异常时保持代码简洁**:...

    系统对接接口设计.pdf

    系统对接接口设计是构建复杂IT系统的关键环节,它涉及到不同系统间的通信、数据交换和功能集成。本篇文档主要探讨了社会服务系统对接接口的设计原则、接口类型以及数据交换方式,旨在实现高效、安全和可扩展的系统...

Global site tag (gtag.js) - Google Analytics