Result 和 自定义异常 在前后端交互中的作用

Result 和自定义异常在前后端交互中扮演着重要的角色。它们可以帮助我们规范化接口返回值,提高错误处理的可读性和可维护性。

Result的作用

Result通常是一个封装了请求结果的类,它包含了请求的状态码、消息和数据。在前端和后端的交互中,Result的作用主要体现在以下几个方面:

  1. 统一返回格式:通过Result类,后端可以将请求的结果统一封装成一个固定的格式返回给前端,这样前端可以更容易地解析和处理返回的数据。例如,无论请求成功还是失败,前端都可以通过解析Result对象来获取状态码和消息,从而做出相应的处理。

  2. 错误码和消息:Result类通常包含错误码和错误消息,这使得前端能够根据不同的错误码做出不同的响应。例如,如果用户登录失败,后端可以通过Result返回一个特定的错误码和消息,前端可以根据这些信息提示用户具体的错误原因。

  3. 简化前端处理:通过使用Result,前端不需要对每个请求的结果进行复杂的判断,只需要检查Result中的状态码即可。这大大简化了前端的逻辑,提高了代码的可维护性。

自定义异常的作用

自定义异常是指根据业务需求创建的异常类,它们可以帮助后端更精确地处理和传递错误信息。在前后端交互中,自定义异常的作用主要体现在以下几个方面:

  1. 精确的错误处理:自定义异常允许开发人员针对特定的业务需求创建新的异常类型,从而使错误处理更加精确。例如,当用户尝试访问一个不存在的资源时,后端可以抛出一个自定义的ResourceNotFoundException异常,前端可以根据这个异常类型做出相应的处理。

  2. 增强代码可读性:通过使用自定义异常,代码的可读性和维护性得到了增强。每个自定义异常类通常都有一个明确的含义,这使得开发人员在阅读代码时能够更容易地理解异常的来源和原因。

  3. 统一异常处理:在Spring Boot等框架中,可以通过全局异常处理机制来捕获和处理自定义异常。这样,无论异常发生在何处,都会得到恰当的处理,避免了异常的泄露和错误的传播。例如,通过使用@ControllerAdvice注解,可以定义一个全局的异常处理器,统一处理所有自定义异常,并将错误信息返回给前端。

  4. 友好的用户提示:自定义异常可以包含详细的错误信息,这些信息可以被传递给前端,从而为用户提供更友好的提示。例如,当用户提交的表单数据不合法时,后端可以抛出一个自定义的InvalidFormDataException,并附带具体的错误信息,前端可以根据这些信息提示用户如何修正错误。

前后端交互的流程

前端发送请求:

  • 前端发送 HTTP 请求到后端接口。

后端处理请求:

  • 后端接收到请求后,进行业务逻辑处理。如果出现错误,抛出自定义异常。

异常处理:

  • 全局异常处理机制捕获自定义异常,并将其转换为 Result 对象。

返回 Result:

  • 后端将 Result 对象返回给前端。

前端处理返回值:

  • 前端接收到 Result 对象,根据状态码和错误信息,做出相应的处理。

示例

示例中,Result类用于封装API的返回结果,ResourceNotFoundException是一个自定义异常,用于处理特定的错误情况。UserController负责处理用户相关的请求,并在必要时抛出自定义异常。GlobalExceptionHandler则统一处理这些异常,并返回标准化的错误信息。

 Result类

/*** Result类用于封装API请求的返回结果。* @param <T> 返回数据的类型*/
public class Result<T> {private int code; // 状态码private String message; // 消息说明private T data; // 返回的数据public Result(int code, String message, T data) {this.code = code;this.message = message;this.data = data;}public int getCode() {return code; // 获取状态码}public String getMessage() {return message; // 获取消息}public T getData() {return data; // 获取数据}
}

 自定义异常

/*** ResourceNotFoundException是一个自定义异常,用于表示请求的资源未找到。*/
public class ResourceNotFoundException extends RuntimeException {public ResourceNotFoundException(String message) {super(message); // 调用父类构造函数}
}

Controller

@RestController 
public class UserController {private final UserService userService; // 用户服务public UserController(UserService userService) {this.userService = userService; // 构造函数注入}/*** 根据用户ID获取用户信息* @param id 用户ID* @return Result<User> 返回用户信息的结果*/@GetMapping("/users/{id}") // 映射GET请求到/users/{id}public Result<User> getUser(@PathVariable Long id) {User user = userService.getUserById(id); // 调用服务获取用户if (user == null) {throw new ResourceNotFoundException("User not found with id: " + id); // 抛出自定义异常}return new Result<>(200, "Success", user); // 返回成功结果}
}

全局异常处理

在全局异常处理器中,可以定义针对自定义异常的处理方法。通过使用@ExceptionHandler注解,框架会自动捕获抛出的自定义异常,并调用相应的处理方法。

@ControllerAdvice 
public class GlobalExceptionHandler {/*** 处理ResourceNotFoundException异常* @param ex 异常对象* @return ResponseEntity<Result<Void>> 返回包含错误信息的Result*/@ExceptionHandler(ResourceNotFoundException.class) // 指定处理的异常类型public ResponseEntity<Result<Void>> handleResourceNotFoundException(ResourceNotFoundException ex) {// 创建包含错误信息的Result对象Result<Void> result = new Result<>(404, ex.getMessage(), null);return ResponseEntity.status(HttpStatus.NOT_FOUND).body(result); // 返回404状态及结果}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/53337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Go]-抢购类业务方案

文章目录 要点&#xff1a;1. 抢购/秒杀业务的关键挑战2. 技术方案3.关键实现点4.性能优化建议5.其他考虑因素 细节拆分&#xff1a;1. **高并发处理**2.**限流与防护**3.**库存控制**4. **异步处理**5. **数据一致性**6. **常用架构设计**7. **代码示例**8. 进一步优化9. 注意…

谈一谈MVCC

一 MVCC的定义 MVCC&#xff08;Multi-Version Concurrency Control&#xff0c;多版本并发控制&#xff09;是一种用于数据库管理系统&#xff08;DBMS&#xff09;中的并发控制方法&#xff0c;它允许数据库读写操作不加锁地并发执行&#xff0c;从而提高了数据库系统的并发性…

视频处理基础之gradio框架实现

这些函数是用于处理视频文件的Python代码片段&#xff0c;它们依赖于ffmpeg和ffprobe工具&#xff0c;这些工具是FFmpeg项目的一部分&#xff0c;用于处理视频和音频数据。下面是每个函数的用途和用法的总结&#xff1a; 1. ffmpeg_installed() 函数&#xff1a; - 用途&am…

苹果手机突然黑屏打不开怎么办?

苹果手机作为市场上备受欢迎的智能手机之一&#xff0c;其稳定性和流畅性一直备受赞誉。然而&#xff0c;偶尔遇到手机突然黑屏无法打开的情况&#xff0c;也会让不少用户感到困扰。今天&#xff0c;我们就来详细探讨一下苹果手机突然黑屏打不开的解决方法&#xff0c;帮助大家…

数学建模_缺失值处理_拉格朗日、牛顿插值(全)

- 缺失值处理 1. 识别缺失值 在处理缺失值之前&#xff0c;首先需要识别数据中的缺失值。 1.1 使用 isna() 和 isnull() Pandas 提供了 isna() 和 isnull() 方法来检测缺失值&#xff0c;二者功能相同。 import pandas as pddf pd.DataFrame({A: [1, 2, None, 4],B: [None, 2,…

echarts 水平柱图 科技风

var category [{ name: "管控", value: 2500 }, { name: "集中式", value: 8000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 } ]; // 类别 var total 10000; // 数据…

【RabbitMQ之一:windows环境下安装RabbitMQ】

目录 一、下载并安装Erlang1、下载Erlang2、安装Erlang3、配置环境变量4、验证erlang是否安装成功 二、下载并安装RabbitMQ1、下载RabbitMQ2、安装RabbitMQ3、配置环境变量4、验证RabbitMQ是否安装成功5、启动RabbitMQ服务&#xff08;安装后服务默认自启动&#xff09; 三、安…

vue3+ts封装类似于微信消息的组件

组件代码如下&#xff1a; <template><div:class"[voice-message, { sent: isSent, received: !isSent }]":style"{ backgroundColor: backgroundColor }"click"togglePlayback"><!-- isSent为false在左侧&#xff0c;为true在右…

传输层协议UDP

本篇将主要介绍 UDP 协议&#xff0c;介绍了有关 UDP 协议的报头、协议特点、UDP 协议在操作系统中的缓冲区、UDP 协议使用的注意事项&#xff0c;以及有关 UDP 的 Socket 编程程序&#xff0c;同时重点介绍了操作系统对于 UDP 协议报文的管理。 接着介绍了有关端口号的映射。 …

网络编程学习:TCP/IP协议

TCP/IP协议简介 TCP/IP协议包含了一系列的协议&#xff0c;也叫TCP/IP协议族&#xff08;TCP/IP Protocol Suite&#xff0c;或TCP/IP Protocols&#xff09;&#xff0c;简称TCP/IP。 分层结构 为了能够实现不同类型的计算机和不同类型的操作系统之间进行通信&#xff0c;引…

【数据结构-二维前缀和】力扣1504. 统计全 1 子矩形

给你一个 m x n 的二进制矩阵 mat &#xff0c;请你返回有多少个 子矩形 的元素全部都是 1 。 示例 1&#xff1a; 输入&#xff1a;mat [[1,0,1],[1,1,0],[1,1,0]] 输出&#xff1a;13 解释&#xff1a; 有 6 个 1x1 的矩形。 有 2 个 1x2 的矩形。 有 3 个 2x1 的矩形。 有…

Python爬虫所需的技术及其原理(简单易懂)

导言 随着互联网的发展&#xff0c;大量的数据被存储在网络上&#xff0c;而我们需要从中获取有用的信息。Python作为一种功能强大且易于学习的编程语言&#xff0c;被广泛用于网络爬虫的开发。本文将详细介绍Python爬虫所需的技术及其原理&#xff0c;并提供相关的代码案例。…

Spark数据介绍

从趋势上看&#xff0c;DataFrame 和 Dataset 更加流行。 示例场景 数据仓库和 BI 工具集成&#xff1a; 如果你需要处理存储在数据仓库中的结构化数据&#xff0c;并且希望与 BI 工具集成&#xff0c;那么 DataFrame 和 Dataset 是首选。 机器学习流水线&#xff1a; 在构建机…

ICLR2024: 大视觉语言模型中对象幻觉的分析和缓解

https://arxiv.org/pdf/2310.00754 https://github.com/YiyangZhou/LURE 背景 对象幻觉&#xff1a;生成包含图像中实际不存在的对象的描述 早期的工作试图通过跨不同模式执行细粒度对齐&#xff08;Biten et al.&#xff0c;2022&#xff09;或通过数据增强减少对象共现模…

xxl-job升级到springboot3.0 导致页面打不开报错)问题

原因&#xff1a;springboot3.0 因为移除了jsp 导致xxl-job不能访问&#xff0c;解决方法如下 1、修改PermissionInterceptor拦截器 package com.xxl.job.admin.controller.interceptor;import com.xxl.job.admin.controller.annotation.PermissionLimit; import com.xxl.job.…

2024 天池云原生编程挑战赛决赛名单公布,9 月 20 日开启终极答辩

历时 4 个月&#xff0c;2024 天池云原生编程挑战赛决赛名单公布&#xff01; 本届大赛规模创新高&#xff0c;参赛战队达 20000 支&#xff0c; 广覆盖国内外优秀高校和杰出企业&#xff01;吸引了来自北京大学、清华大学等 176 所国内外优秀高校&#xff0c;以及美团、米哈游…

2025年25届必看:如何用Java SpringBoot+Vue搭建大学生成绩量化管理系统?

✍✍计算机毕业编程指导师** ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java…

青岛实训 8月21号 day33

1.设置主从从mysql57服务器 1&#xff09;配置主数据库 [rootmsater_5 ~]# systemctl stop filewalld [rootmsater_5 ~]# setenforce 0 [rootmsater_5 ~]# systemctl disable filewalld [rootmsater_5 ~]# ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64.tar.g…

怎么摆脱非自然链接?

什么是非自然链接&#xff1f; 非自然链接是人为创建的链接&#xff0c;用于操纵网站在搜索引擎中的排名。非自然链接违反了Google 的准则&#xff0c;网站可能会因此受到惩罚。 它们不是由网站所有者编辑放置或担保的。示例包括带有过度优化锚文本的链接、通过 PR 的广告、嵌…

rancher搭建k8s及jenkins自动化部署

1、准备环境 角色IP用途k8s-rancher-master192.168.3.63master节点k8s-rancher-node01192.168.3.64node节点k8s-rancher-node02192.168.3.66node节点k8s-rancher-server192.168.2.33rancher-server节点注: 服务器名需要配置不同,相同服务器名不能加入node节点 在所有节点进行…