热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

探讨业务异常处理的最佳实践

本文讨论了两种不同的业务异常处理方法,并探讨了HTTP状态码的选择对前后端交互的影响。

一位开发者提出疑问:‘关于业务异常的处理方式’,他在V站搜索发现的大多是过时的帖子,因此新开此贴寻求建议。

他提到,在前一家公司,对于如用户名错误等业务异常,通常不使用异常处理机制,而是直接通过返回特定的消息来告知前端。例如,在登录功能中,如果用户名不存在,则直接返回一个错误信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
public void login(String username, String password) {
User user = db.getUsername(username);
if (user == null) {
// UnifyResponse 是用于封装响应结果的实体类,参数1:状态码,参数2:消息内容
return UnifyResponse.FAIL(400, "用户不存在");
}
}

前端接收的响应格式如下:

1
2
3
4
5
6
http status: 200
{
code: 400,
message: "用户名不正确"
}

而在当前公司,对于类似的业务异常,采用的是抛出异常的方式,然后在全局异常处理器中统一处理这些异常,返回给前端的响应如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
public void login(String username, String password) {
User user = db.getUsername(username);
if (user == null) {
throw new NotFoundException(400, "用户名不正确");
}
}

前端接收的响应格式为:

1
2
3
4
5
6
7
http status: 404
{
code: 400,
message: "用户名不正确"
}

基于以上两种方法,提出了两个具体的问题:

  • 业务逻辑中遇到异常时,是应该直接返回错误信息,还是应该抛出异常并在全局捕获后再返回给前端?
  • HTTP状态码的选择上,是应该统一使用200状态码,还是应该根据RESTful规范使用适当的错误代码(如404表示未找到资源,403表示没有权限)?

开发者们普遍认为,遵循RESTful规范使用适当的HTTP状态码可以提高系统的可维护性和用户体验,同时也能更好地与现代Web开发标准接轨。然而,这也需要考虑前端开发者的接受程度和现有系统的设计兼容性。


推荐阅读
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 本文介绍如何使用 Angular 6 的 HttpClient 模块来获取 HTTP 响应头,包括代码示例和常见问题的解决方案。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • Python + Pytest 接口自动化测试中 Token 关联登录的实现方法
    本文将深入探讨 Python 和 Pytest 在接口自动化测试中如何实现 Token 关联登录,内容详尽、逻辑清晰,旨在帮助读者掌握这一关键技能。 ... [详细]
  • 微信小程序:授权登录与手机号绑定
    本文详细介绍了微信小程序中用户授权登录及绑定手机号的流程,结合官方指引和实际开发经验,提供了一套完整的实现方案,帮助开发者更好地理解和应用。 ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 本文探讨了 RESTful API 和传统接口之间的关键差异,解释了为什么 RESTful API 在设计和实现上具有独特的优势。 ... [详细]
author-avatar
小梦茜呦_163
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有