优化系统报错提示信息,提高人机交互(一)

news2025/2/28 2:58:52

1、常规报错及处理

package com.example.demo.controller;

import com.example.demo.service.IDemoService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@AllArgsConstructor
@RestController
@Slf4j
public class DemoController {

    private IDemoService demoService;

    @GetMapping("exceptionTest")
    public Integer exceptionTest(){
        Integer result = 0;
        Integer integer1 = 0;
        Integer integer2 = 2;
        result = integer2/integer1;
        return result;
    }

}

调用接口,返回结果如下:
调用者得到的反馈信息
服务器端报错:

java.lang.ArithmeticException: / by zero
	at com.example.demo.controller.DemoController.exceptionTest(DemoController.java:21) ~[classes/:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	....

一般接口报错,前端根据status为500可判断出服务器端报错,但是无法判定什么原因,这时候只能联系后端服务,后端根据日志判断出代码的DemoController.java:21出现bug,然后修复bug,更新程序解决问题。
这个示例中的问题明显是程序的bug,这样解决起来无可厚非,但是如果是一些复杂的系统,需要用户按照一定流程,需要进行一些配置,如果用户在某些环节操作不当,导致其他模块出错,那么这时候可以判定是系统没有错,是用户的使用问题,这时候接口不能只返回服务器报错,但是前端无法给用户一些提示信息和错误的原因,告知客户哪些地方操作不对,需要更改配置或者做一下前置操作,那么如何优化呢?
(1)加一些判断,在调用当前接口处理某些逻辑事,如果发生错误,先捕获异常,然后在catch代码块判断前置条件是否满足,不满足则返回提示信息;
(2)捕获异常并处理,返回提示信息
(3)前端在调接口前,先调一个验证接口,通过再调目标接口,如常规字段的验证,前端利用js即可完成

返回信息,有2种:第一种是在参数中返回,这种比较简单,对于一些简单的操作可采用;第二种则是抛出异常,代替参数返回,如上面的接口,发生错误,系统抛出异常,代替了接口自身返回String的方式

2、错误处理提示示例
接口修改下,2个整数相除,第二个参数除以第一个参数,返回结果
(1)对异常进行捕获,并抛出异常

@GetMapping("exceptionTest")
    public Integer exceptionTest(Integer integer1,Integer integer2){
        Integer result = 0;
        try {
            result = integer2/integer1;
        } catch (Exception e) {
            if (0 == integer1){
                throw new RuntimeException("除数不能为0");
            }

        }
        return result;
    }

抛出运行异常

抛出异常接口调用结果

发现抛出异常,但是到不了前端,这种时候前端可以判断作为除数的数,是否为0,如果为0,则直接提示,做好校验。那么假如前端不做校验,后端接口应该怎么处理呢?能不能优化

经过一番优化,达到了下面的效果
优化效果
这样接口返回了报错原因,前端可以提示给用户,提高了人机交互。

具体怎么实现的,请继续查看另一篇:优化系统报错提示信息,提高人机交互(二)

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

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

相关文章

13基于PCA的人脸识别,程序已调通,可将自己的数据替换进行识别,得到识别准确率结果,MATLAB平台。

基于PCA的人脸识别,程序已调通,可将自己的数据替换进行识别,得到识别准确率结果,MATLAB平台。

DevSecOps内置安全保护

前言 随着DevOps的发展,DevOps大幅提升了企业应用迭代的速度。但同时,安全如果不能跟上步伐,不仅会抵消DevOps变革带来的提升,拖慢企业数字化转型进程,还会导致漏洞与风险不约而至。所以安全能力在全球范围内受到的重…

2023_Spark_实验十二:Spark高级算子使用

掌握Spark高级算子在代码中的使用 相同点分析 三个函数的共同点,都是Transformation算子。惰性的算子。 不同点分析 map函数是一条数据一条数据的处理,也就是,map的输入参数中要包含一条数据以及其他你需要传的参数。 mapPartitions函数是一个…

IOTE 2023国际物联网展直击:芯与物发布全新定位芯片,助力多领域智能化发展

IOTE 2023国际物联网展,作为全球物联网领域的盛会,于9月20日在中国深圳拉开帷幕。北斗星通集团应邀参展,旗下专业从事物联网、消费类GNSS芯片研发设计的芯与物公司也随其亮相本届盛会。 展会上,芯与物展示了一系列创新的GNSS定位…

基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(五)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 数据增强3. 模型构建4. 模型训练及保存5. 模型评估6. 模型测试 系统测试1. 训练准确率2. 测试效果3. 模型应用1)程序下载运行2)应用使用说明3)测试结果 相关其它…

【深度学习】快速部署ONNX模型【入门】

【深度学习】快速部署ONNX模型【入门】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】快速部署ONNX模型【入门】前言搭建打包环境打包exe文件总结 前言 之前的内容已经尽可能简单、详细的介绍CPU【Pytorch2ONNX】和GPU【Pytorch…

编译opencv-3.4.5 [交叉编译]

在unbuntu20.04环境下编译opencv3.4.5, cmake 版本:3.27.4 gcc 版本:11.4.0 g版本:11.4.0 在此环境下编译opencv4.5.4正常。 1. 编译时遇到的问题 (1) Built target libprotobuf make: *** [Makefile:163…

玩玩“小藤”开发者套件 Atlas 200I DK A2 之部署智能语音助手

玩玩“小藤”开发者套件 Atlas 200I DK A2 之部署智能语音助手 0. 背景1. 安装 flac2. 创建自签名证书3. 创建虚拟环境4. 安装PyTorch5. 安装 PyTorch 插件 torch_npu6. 安装APEX混合精度模块7. 安装依赖库8. 使用 gradio 启动智能语音助手9. 访问智能语音助手 0. 背景 总所周…

和逸云 RK3229 如何进入maskrom强刷模式

图中红圈两个点短接以后插usb,就可以进入maskrom模式强刷

【JavaEE】多线程(四)

多线程(四) 在开始讲之前,我们先来回顾回顾前三篇所讲过的内容~ 线程的概念 并发编程,多进程,比较重,频繁创建销毁,开销大 Thread的使用 创建线程 继承Thread实现Runnable继承Thread&#xff…

提交本地项目到GitHub

文章目录 1 下载git1.1 通过homebrew安装Git1.2 通过Xcode安装 2 创建ssh key、配置git3 提交本地项目到GitHub 说明:该博文参考这篇文章和这段视频 1 下载git 1.1 通过homebrew安装Git 1、未安装homebrew,需安装homebrew /usr/bin/ruby -e "$(…

踩坑:Invalid character found in method name. HTTP method names must be tokens

一、原因 在进行本地小程序与服务端请求时,由于加了签名认证,访问接口时报错 Spring boot端 小程序端 二、解决方案 2.1 更改访问路径 将https:更换成http: 示例:https://localhost:8080 改为 http://localhost:8080 2.2其他原因 ssl证书到期了Tomcat的header缓冲区大小不…

使用docker-compose 部署 MySQL8.0

目录 一、拉取MySQL镜像二、创建挂载目录三、添加配置文件my.cnf (没有特殊需求可以跳过)四、编写 docker-compose.yml 文件五、启动容器六、运行后查看启动容器的情况七、连接测试 一、拉取MySQL镜像 我这里使用的是MySQL8.0.18,可以自行选…

pycharm 中package, directory, sources root, resources root的区别

【遇到的问题】 导入yolov5中有utils文件,自己的代码中也有utils文件,使得yolov5中的这部分引用出错了。 【解决方案】 单独建立detection文件夹,把检测相关的都放在这里,yolov5是github上拉取的源码,发现yolov5中fr…

用于设计 CNN 的 7 种不同卷积

一 说明 最近对CNN架构的研究包括许多不同的卷积变体,这让我在阅读这些论文时感到困惑。我认为通过一些更流行的卷积变体的精确定义,效果和用例(在计算机视觉和深度学习中)是值得的。这些变体旨在保存参数计数、增强推理并利用目标…

scryptTS 新版本发布

scryptTS新版本发布,主要带来两个新特性。 您需要使用以下版本来体验: "dependencies": {"scrypt-ts": "0.1.5-beta.2" },1. scryptTS 中隐藏了交易原像 OP_PUSH_TX 技术 使用 OP_PUSH_TX 可以让合约代码访问整个 trans…

解决:Android Studio 中sdk tools 中库显示不全的问题

问题描述 如下图,打开配置后显示不全 解决方案 这是网络问题,由于Android Studio是goolge旗下的产品,多少需要向外访问 通过更改hosts文件即可,用记事本打开,末尾添加如下三行 203.208.43.97 dl.google.com 20…

1.3python基础语法——PyCharm

1)PyCharm的作用 python的集成开发环境,功能如下: Project管理 智能提示 语法高亮 代码跳转 调试代码 解释代码(解释器) 框架和库 2)下载与安装 下载地址:http://www.jetbrains.com/pycharm/download/#sectionwind…

flash attention的CUDA编程和二维线程块实现softmax

本文参考了链接添加链接描述 flash attention介绍 flash attention的介绍可以参考论文:FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness,具体的数学公式参考下面这个图片:其中注意关于矩阵S有两个维度,softmax的操作维度是dim=1,用pytorc…

python 全网最优雅命令行参数解析, 没有之一

背景 我们在编写python程序时,程序中经常会提供多种功能或者模式,在实际使用时根据不同的参数使用不同的功能。那么如何获取命令行传入进来的参数呢? 一般方法 一般情况下,我们会使用 sys 模块,如👇 im…