异常这样处理,对用户更友好

❤️Python异常捕获和处理❤️保姆式教学,代码异常报错也能那么和谐且个性! 异常常有,但如何让外人看来很正常才是关键 阅读详情

在项目中,经常有一些业务需要抛出异常,但是如果后台直接抛出throw new Exception的话,前端就很难看,对用户提示也不够友好,今天我们就来解决这个问题。

先建立一个工程,模拟将异常抛出。如下:

@RestController
public class DemoController {

    @GetMapping("test")
    public String test() throws Exception{
        if(true){
            throw new Exception("error");
        }
        return "ok";
    }
}

前端用浏览器请求下,看看界面什么样子:

@ControllerAdvice 和 @ExceptionHandler

@Slf4j
@ControllerAdvice
public class GlobalExceptionHandler {
        @ExceptionHandler
        @ResponseBody
        @ResponseStatus(HttpStatus.OK)
        public ResultDto globalException(HttpServletResponse response, Exception ex){
                log.info("ExceptionHandler...");
                log.info("错误代码:"  + response.getStatus());
                ResultDto resultDto = new ResultDto();
                resultDto.setCode(0);
                resultDto.setMsg(ex.getMessage());
                resultDto.setData(null);
                return resultDto;
        }
}

定义个返回到前端的通用结构体

@Data
public class ResultDto {
    //请求结果0表示失败,其他是成功
    private int code;
    //失败的消息
    private String msg;
    //实际返回到前端的数据
    private Object data;
}

然后我们写一个controller模拟抛出异常

@GetMapping("test1")
public String test1() throws Exception{
    if(true){
        throw new NullPointerException("NullPointerException");
    }
    return "ok";
}

@GetMapping("test2")
public String test2() throws Exception{
    if(true){
        throw new RuntimeException("RuntimeException");
    }
    return "ok";
}

@GetMapping("test3")
public String test3() throws MyException{
    if(true){
        //不能直接拋Exception 否则不能捕获,可以自己定义一个异常
        throw new MyException("MyException");
    }
    return "ok";
}

请求下,看看postman返回的是什么

{
    "code": 0,
    "msg": "NullPointerException",
    "data": null
}

在实际业务中我们通常返回自定义的异常,那么我接下来定义一个自己的异常,并对自己的异常进行单独的处理:

public class MyException extends Exception {
    public MyException() {
        super();
    }

    public MyException(String message) {
        super(message);
    }

    public MyException(String message, Throwable cause) {
        super(message, cause);
    }

    public MyException(Throwable cause) {
        super(cause);
    }

    protected MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}

然后在GlobalExceptionHandler中增加对MyException的处理:

@ExceptionHandler(MyException.class)
@ResponseBody
@ResponseStatus(HttpStatus.OK)
public ResultDto myException(HttpServletResponse response, MyException ex){
        log.info("MyExceptionHandler...");
        log.info("错误代码:"  + response.getStatus());
        ResultDto resultDto = new ResultDto();
        resultDto.setCode(0);
        resultDto.setMsg(ex.getMessage());
        resultDto.setData(null);
        return resultDto;
}

请求http://localhost:8080/test3看看输出到前端的是什么

{
    "code": 0,
    "msg": "MyException",
    "data": null
}

这里其实看不出来到底走的是myException还是globalException但是如果你看后台日志输出就能清晰的看到。因此我们在对多种异常进行处理的时候springboot会优先处理子类异常。

更多java原创阅读:https://javawu.com

实现一个简单的控制台版用户登陆程序, 程序启动提示用户输入用户名密码.(如果用户名密码出错, 使用自定义异常的方式来处理) import java.util.Scanner; public class Login { //实现一个简单的控制台版用户登陆程序, 程序启动提示用户输入用户名密码. // 如果用户名密码出错, 使用自定义异常的方式来处理 private static String name = "yjy"; private static String pass... 阅读详情

相关推荐

「API取数」FDL获取金蝶云星空的单据数据

本文介绍了如何使用FDL实现金蝶云API取数以及如何有效应对复杂的API数据处理场景。

oOBubbleX的博客 2030

后台报错给用户和前端友好提示(页面和配置)

404页面: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>页面走丢...

曾小超的博客 4167

笔记本摄像头模拟监控推送RTSP流

FFmpeg软件:选择Windows builds by BtbN一个完整的跨平台解决方案,用于录制、转换和流式传输音频和视频。选择Windows版本EasyDarwin开源流媒体服务器 支持Windows、Linux、macOS平台;支持RTSP推流分发(推模式转发);支持RTSP拉流分发(拉模式转发);VLC Media Player软件:选择Windows64bit支持众多与及文件格式,并支持DVD影音光盘,VCD影音光盘及各类协议。

IT_LittleBaby的博客 3874

SpringBoot统一收集异常信息并返回给前端

我们增加了一个统一处理前端返回信息的类,即便业务controller方法里面没有try catch,还是可以通过@ExceptionHandler进行捕获并返回(这里指定的是所有异常Exception,可以根据不同异常的返回结果,进行细化处理)。@InitBinder可以对WebDataBinder对象进行初始化,在前后端交互时,经常会遇到表单中的日期字符串和JavaBean的Date类型的转换,通过这个方法可以对前端穿过来的日期字符串进行统一的格式化处理,无需在每个方法中进行转换。

knowwait的博客 5733

AutoLISP 学习 (一)

AutoLISP基本语法结构、语法 以括号组成表达式,左右括号一定要成对,单、双引号也要成对,例如: (defun c:hello() (princ "\nHello world!") (prin1) ) 表达式格式:(函数名 操作数 操作数 …),例如: (setq p1 (list 0 0)) (setq p2 (list 10 10)) (setq p3 (list 20 20)) ;;; CAD中画直线,经过p1 p2 p3 (command "LINE" p1 p2 p3 ""

m0_54575622的博客 2123

基于图神经网络强化学习解决车辆路径规划问题(完整代码+报告)

基于图神经网络强化学习解决车辆路径规划问题(完整代码+报告)

3056

throws Exception与多个try catch抓取不同的异常给前端返回不同报错信息

以前在学习java的过程中,学到的知识是:如果代码块可能会抛出异常或者需要实现的代码已经有抛出的异常,需要用try 来包裹代码块, 用catch来捕获异常。这个没啥毛病~后续工作之后掌握的是自定义一些专属的方法异常或者是项目自定义异常,来控制专属的方法或者操作报错后,便于区分报错类型,也可以根据不同的catch到的异常来给前端传递不同的话述(通过不同的报错定位不同的问题,而不是统一的一句“提交失败”)。 package com.company.exception; public class Te...

uwangwenjing的博客 2718

SAP 系统中的数字签名解决方案及应用案例分析

在当前企业信息化及数字化转型的大背景下,数据安全与身份认证显得尤为重要。数字签名技术作为保障数据真实性和完整性的重要手段,在 SAP 系统中得到了广泛应用。本文将详细探讨 SAP 系统中部分应用场景如何利用数字签名技术满足业务需求,涵盖 SAP Single Sign-On、质量管理、过程工业生产计划以及 SAP ArchiveLink 内容服务器等方面,力求通过深入解读,帮助读者更好地理解和应用这一关键技术。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 529

基于springboot和ajax的简单项目 03针对用户友好,使用全局异常类处理前端(controller)来处理(下)

这对于用户来说,不是很友好,所以,使用全局异常类来处理前端(controller)的异常,比较的合适。关键是一个注解@ControllerAdvice//mvc模块中用来描述异常处理类的注解。前端用户,只要有错误,会出现。

qq_38757863的博客 123

实现电脑同时上内网和外网(或通过外网访问到该电脑通过该电脑访问内网)

一、需求描述 目前使用的公司网络只能够上内网,但是又有上外网查资料的需求: ①想要实现电脑既能上内网的同时也可以上外网; ②想要使用其他外网电脑使用外网连接到该电脑,通过该电脑访问内部的网络内容。 二、准备内容 电脑必须具备两个网卡,即:可以同时连接内网和外网(比如我的笔记本就可以:使用网线连接笔记本网口与内网通讯,使用WIFI连接手机热点访问外部网络); 注意:如果只有一个网口,可以另外购买USB的无线网卡来实现上网卡。 三、实现电脑同时上内网和外网的操作步骤 3.1、网络拓扑图 ..

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 2万+

Allegro快速编辑丝印文字操作指导

选择setup-Application Mode-placement edit。Allegro支持丝印文字的编辑,下面介绍快速编辑丝印文字的两种方法如下。这个功能还支持拷贝粘贴,可以从其它地方拷贝过来,免去了书写的麻烦。出现text edit窗口,输入自己需要的文字,点击ok。鼠标移动到丝印文字位置,文字会被高亮起来。Allegro快速编辑丝印文字操作指导。点击丝印文字,丝印会被高亮起来。选择Text edit 命令。输入需要更改后的文字,如下。右击选择text edit。以编辑下方丝印文字为例。

weixin_54787054的博客 4193

调用后台接口返回报错前端隐藏提示_从零开始的Android新项目9 - 前端用后台接口设计...

这回来讲讲后台接口的设计。可能有同学会觉得后台的接口和我们大前端开发有什么关系?试想一下,在碰到一些不合理的接口设计的时候,你们开发是否觉得很别扭——需要为了坑爹的接口写很多脏代码引坑?甚至,这么开发出来的页面,体验也会很差?我们不是说硬无理要求后端接口按照前端业务去封装,而是说为了项目更好地发展,为了用户能有更棒的体验,应该有讨论商量的空间。一些差劲的设计,应该被拒绝。本文使用前端来指代 And...

weixin_29022299的博客 702

Jetson系列目标检测及推流

使用硬件编码,gstreamer推rtsp流至平台

xiao__run的博客 2710

Java系统开发中进行全局异常管理,对参数异常、请求异常、媒体异常、数据库异常、文件异常、JSON异常、运行时异常等等进行分类处理,可以对异常进行监控并记录,减少代码冗余和重复工作量,让用户界面更友好

Java系统开发中进行全局异常管理,对参数异常、请求异常、媒体异常、数据库异常、文件异常、JSON异常、运行时异常等等进行分类处理,可以对异常进行监控并记录,减少代码冗余和重复工作量,让用户界面更友好。 0.主要异常及状态 COM_ARGUMENT_NOT_VALID(101,"参数无效异常"), COM_ARGUMENT_NOT_READARABLE(102,"参数解析失败"),...

代码讲故事 686

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Springmvc中异常处理

思想:做一个全局异常处理器,处理所有没有处理过的运行时异常用于更友好地提示用户。 目录一.全局异常处理器二.更智能、更友好的提示,解决方案 一.全局异常处理器 /** * 全局异常处理器 * @author Steven * */ public class CustomerException implements HandlerExceptionResolver { @Override...

开水烫鱼的博客 352

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

13 FastAPI异常处理机制

FastAPI 允许你为应用注册自定义异常处理器。这可以让你为特定的异常类型提供统一的错误响应格式。例如,我们可以定义一个处理(验证错误)的异常处理器,来确保返回一致的错误格式。# 定义异常处理器name: str在这个例子中,我们创建了一个,它会捕获,并返回一个统一格式的错误响应。在返回的 JSON 中,我们包含了message和errors字段,帮助开发者或客户端理解验证错误的具体细节。

wujianyouhun的专栏 1451

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

php异常处理—重新抛出异常

有时,当异常被抛出时,您也许希望以不同于标准的方式对它进行处理。可以在一个 "catch" 代码块中再次抛出异常。 脚本应该对用户隐藏系统错误。对程序员来说,系统错误也许很重要,但是用户对它们并不感兴趣。为了让用户更容易使用,您可以再次抛出带有对用户比较友好的消息的异常: <?php class customException extends Exception { public fu

不一样的焰火 2857

tp5 ThinkPhp5 自定义异常处理类(先留坑

//我先写点前期的准备,先留坑,后面有机会把他写完,填坑完 在项目的开发过程中异常抛出尤为重要不仅能够做出友好提示帮助掩盖我们伟大的程序员们尴尬的瞬间,还能做到提示开发人员代码白编写的错误,下面进行自定义异常抛出类 异常抛出那么只有在代码出现问题的时候或者是逻辑出现异常的时候会进行抛出,那么我认为这就会出现两种情况, 第一种是用户传输的参数或者用户操作的流

whulovely的博客 3550

SpringMVC(异常处理)

Springmvc中异常处理 思路:做一个全局异常处理器,处理所有没有处理过的运行时异常用于更友好地提示用户。 创建全局异常处理器 /** * 全局异常处理器 * @author Steven * */ public class CustomerException implements HandlerExceptionResolver { @Override public Mod...

Woo_home的博客 210

milkdown异常捕获:全局错误处理与用户友好提示

在现代Web应用开发中,富文本编辑器作为核心交互组件,其稳定性直接影响用户体验。milkdown作为一款插件驱动的所见即所得Markdown编辑器框架,在提供灵活扩展能力的同时,也面临着复杂场景下的异常处理挑战。本文将深入剖析milkdown的错误处理机制,从异常类型定义到全局捕获策略,再到用户友好提示设计,为开发者提供一套完整的异常处理解决方案。 ## milkdown异常体系架构 ### ...

gitblog_00378的博客 691

java之struts2之异常处理

1.在应用项目中,异常的出现时很正常的。而且项目上线后发生异常也很正常的。那么需要对这些异常有相应的处理机制,以便客户能够看你到更加友好的界面。Struts2中提供了异常处理机制。 2.Struts中异常处理实现   a) 在 action 处理类中抛出的异常 public class UserAction { public String add() throws N...

weixin_30768661的博客 100

TP5:异常处理封装——3

如果不进过异常封装,如果抛出一异常只会只会上图所示,大部分时候,用户只需要知道Division by zero就够了。 1、首先先建一个类BaseException并继承Exception,这里有三个参数 $code =400; $msg ;  $errorCode ;并处理当抛出异常时的参数。 下面要用来一个面向截面的思想,我们打开config.php这个文件,找到exception...

lsp的博客 3147

Android捕获全局异常,并对异常做出处理

在做项目时,经常会把错误利用异常抛出去,这样在开发时就可以通过手机抛的异常排查错误,很方便。但是当程序开发完毕,版本稳定,需要上线时,为了避免抛出异常影响用户感受,可以捕获全局异常,对异常做出处理。具体的实方法如下:利用Thread.UncaughtExceptionHandler 获取异常,并对异常做出处理:public class MyUncaughtExceptionHa

Working harder, getting stronger! 1360

J2EE项目整体异常处理机制

在实际的j2ee项目中,系统内部难免会出现一些异常,如果把异常放任不管直接打印到浏览器可能会让用户感觉莫名其妙,也有可能让某些用户找到破解系统的方法。   出来工作一年时间了,我也大概对异常处理有了一些了解,在这呢小弟简单介绍下个人对异常处理的见解,抛砖引玉,希望各位大神提出宝贵的意见和建议。 ITblog8    就拿spring+struts2+hibernate项目说明:通常一个页面请求

小将的专栏 900
上一篇: 配置文件这样写,多环境自由切换
下一篇: 分布式缓存redis,看这一篇就够了
大盛玩java
博客等级 码龄5年 0粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值