springcloud中服务提供者进行统一异常处理

使用篇=SpringCloud异常处理统一封装我来做、建议收藏 简介 重复功能我来写。在 SpringBoot 项目里都有全局异常处理以及返回包装等,返回前端是带上succ、code、msg、data等字段。单个项目情况下很好解决,当微服务模块多的情况下,很多情况开发都是复制原有代码进行构建另外一个项目的,导致这些功能升级需要修改多个服务,在这个基础上,我们封装了一个组件 unified-dispose-spring-cloud-starter 里面包含了一些基础的异常处理以及返回包装功能。 1|2依赖添加启动功能 <depende... 阅读详情

我的项目中,使用nacos作为服务发现与注册中心,请求通过gateway网关匹配url请求不同的api服务,api服务根据服务名请求具体的服务。gateway中利用webflux进行了异常处理,主要针对api不可达的异常。api中利用sentline及fegin的fallback进行了异常的处理。在具体的服务时,想要自定义一些异常,并且进行统一的捕获并返回,且返回的数据格式需要与正常的一致,避免给前端造成麻烦。

1.自定义的异常类

这里注意不要msg不要定义成message,因为RuntimeException 中定义了一个message的变量。

/**
 * 自定义的运行时异常
 * @author 
 * @date 2020-02-26 17:00
 *
 */
public class BizException extends RuntimeException {

    private Integer code;
    private String msg;
    private String developMsg;
    private String uri;

    public BizException(Integer code, String message) {
        this.code = code;
        this.msg = message;
    }

    public BizException(BizExceptionEnum bizExceptionEnum, String developMsg) {
        this.code = bizExceptionEnum.getCode();
        this.msg = bizExceptionEnum.getDesc();
        this.developMsg = developMsg;
    }

    public BizException(BizExceptionEnum bizExceptionEnum) {
        this.code = bizExceptionEnum.getCode();
        this.msg = bizExceptionEnum.getDesc();
        this.developMsg = bizExceptionEnum.getDesc();
    }

    public Integer getCode() {
        return code;
    }

    public String getMsg() {
        return msg;
    }

    public String getDevelopMsg() {
        return developMsg;
    }

    public String getUri() {
        return uri;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public void setDevelopMsg(String developMsg) {
        this.developMsg = developMsg;
    }

    public void setUri(String uri) {
        this.uri = uri;
    }
}

2.定义统一的返回类
import com.ruizhi.detection.common.restful.exception.BizException;
import lombok.Data;

/**
 * @description: 统一的异常返回
 * @Author: 
 * @Date: 2020/2/26 11:34
 */
@Data
public class ResponseDto<T> {
    /**
     * 状态码
     */
    private Integer code;

    /**
     * 状态信息
     */
    private String message;

    /**
     * 错误信息
     */
    private String errorMessage;

    /**
     * 数据
     */
    private T data;

    public ResponseDto(Integer code, String message, T data) {
        this.code = code;
        this.data = data;
        this.message = message;
    }

    public ResponseDto(BizException bizException) {
        this.code = bizException.getCode();
        this.message = bizException.getMsg();
        this.errorMessage = bizException.getDevelopMsg();
    }
}

3.定义异常的枚举
/**
 * 异常的枚举类
 * @author sys
 * @updater
 * @updateDate 2020-02-36 14:11
 */
public enum BizExceptionEnum {
    /**
     * 异常
     */
    ID_NOT_NULL(50001, "ID不能为NULL"),
    FIND_MODEL_BY_ID_ERROR(50002, "根据id查询数据时异常"),
    DATA_NOT_EXIST(50003, "数据不存在"),
    INVALID_ARGUMENT(50004, "无效的参数"),
    UPDATE_ERROR(500016, "修改数据时异常!"),
    ROLE_AUTH_ERROR(500017, "角色授权失败!");

    private Integer code;
    private String desc;

    BizExceptionEnum(Integer code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public Integer getCode() {
        return this.code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getDesc() {
        return this.desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }
}

4.异常的捕获及统一返回
import javax.servlet.http.HttpServletRequest;

/**
 * 统一捕获异常的
 * @author 
 * @date 2020-02-26 17:24
 */
@ControllerAdvice
public class BizExceptionHandler {

    private static final Logger logger = LoggerFactory.getLogger(BizExceptionHandler.class);

    @ExceptionHandler({Exception.class})
    public ResponseEntity<ResponseDto> handleException(Exception exception, HttpServletRequest request) {
        final boolean isBizException = exception instanceof BizException;
        logger.error("触发请求:[{}]时系统出现异常,异常类型:{}", request.getRequestURI(), isBizException ? "业务异常" : "系统异常");
        BizException bizException = (BizException) exception;
        ResponseDto responseT = new ResponseDto(bizException);
        return new ResponseEntity<>(responseT, HttpStatus.OK);
    }
}
5.service中抛出异常
 try {
       // 异常了
      }catch (Exception e){
           throw new BizException(BizExceptionEnum.DATA_NOT_EXIST, "根据id查询不到权限:id=" + permissionId);
      }

这样返回的数据格式如下:
在这里插入图片描述

【SpringCloud】 Fegin跨服务异常统一处理 【SpringCloud】 Fegin跨服务异常统一处理。一个庞大的微服务生态,每个服务都是处理自己的业务互不干扰,随着业务的不断扩展,就会涉及到一些服务之间的数据传输、接口共用、各种类型异常过滤统一处理等场景。Feign在微服务框架使服务之间接口调用变得很简洁、简单,而不需要再编写Java Http调用其他微服务的接口。 阅读详情

相关推荐

DataGridView 右键菜单复制(公共)

dataGridView1.CellMouseClick += new DataGridViewCellMouseEventHandler( (sender1, e1) => { if (e1.Button == MouseButtons.Right) {

沁心渃水 2829

SpringMVC全局异常处理

SpringMVC全局异常处理 SpringMVC全局异常处理方式一般分为两大种: 使用 HandlerExceptionResolver 接口 在 Controller 内部实现 一、使用 HandlerExceptionResolver 接口 HandlerExceptionResolver 是org.springframework.web.servlet下的一个接口,可以解析在处理程序映...

lm121380的博客 408

EDKII实战:手把手调试PciHostBridge.c,看UEFI如何分配你的PCIe设备资源(IO/Memory空间)

本文深入解析EDKII中PciHostBridge.c模块的工作原理,详细指导如何调试PCIe设备资源分配(IO/Memory空间)。通过实战案例展示UEFI环境下Root Bridge初始化、地址空间转换及协议安装等核心流程,提供常见问题排查方法与性能优化建议,帮助开发者解决PCIe设备兼容性问题。

weixin_29201933的博客 208

Spring Cloud Gateway的全局异常处理

Spring Cloud Gateway中的全局异常处理不能直接用@ControllerAdvice来处理,通过跟踪异常信息的抛出,找到对应的源码,自定义一些处理逻辑来符合业务的需求。 网关都是给接口做代理转发的,后端对应的都是REST API,返回数据格式都是JSON。如果不做处理,当发生异常时,Gateway默认给出的错误信息是页面,不方便前端进行异常处理。 需要对异常信息进行处理,返回JSON格式的数据给客户端。下面先看实现的代码,后面再跟大家讲下需要注意的地方。 自定义异常处理逻辑: pa

乌龟的专栏 2335

矿卡CMP 170HX的AI推理性能优化实战

GPU计算在现代AI推理中扮演着核心角色,其并行计算架构特别适合处理神经网络的大规模矩阵运算。通过CUDA指令集优化和计算管线重构,可以显著提升硬件利用率,这在边缘计算和带宽敏感型任务中尤为重要。以NVIDIA CMP 170HX矿卡为例,通过禁用FMA指令和框架适配优化,其FP32性能可提升15.9倍,在Qwen2.5-1.5B模型的4-bit量化推理中达到A100同架构78%的解码速度。这种优化技术不仅让淘汰矿卡重获新生,更为边缘AI部署提供了高性价比解决方案,特别适合7B以下量化模型部署和多路视频分析

weixin_30432579的博客 624

MTK Tunning ISP 模块面试总结

ISP面试问答

m0_72053187的博客 4536

【第13章】Spring Cloud之Gateway全局异常处理

网关作为我们对外服务的入口起着至关重要的作用,我们必须保证网关服务的稳定性,下面来为网关服务增加异常处理机制。回到顶部。

zjg 2405

从d、q轴电流到电机性能:FOC控制中角度偏移的实战影响与调试策略

本文深入探讨了永磁同步电机FOC控制中d、q轴电流与角度偏移对电机性能的影响及调试策略。通过分析角度偏移导致的效率下降、电流异常等问题,提供了实用的四步调试法和参数优化技巧,帮助工程师有效提升电机控制精度和效率。

weixin_29264201的博客 293

网关 Spring Cloud Gateway 统一全局异常处理

前言 自定义异常处理逻辑 覆盖默认的配置 1. 异常时如何返回 JSON 而不是 HTML? 2. getHttpStatus 需要重写 验证 本文Spring Cloud Gateway 版本:2020.0.0 前言 Spring Cloud Gateway异常默认返回如下: 浏览器访问:

laker的博客 1万+

高压控制单元与接触器 —— BMS电池的“高压大门”

高压接触器在BMS电池管理系统中扮演着“高压大门”的角色,负责控制电池包与整车高压母线的连接与隔离。接触器的工作原理基于线圈产生的磁力吸合接点,通过主触点接通高压电流路径,辅助触点检测状态,灭弧结构保护接点。预充电路的设计是为了避免直接连接大电容时产生的浪涌电流冲击,通过预充电阻逐步充电,确保系统安全上电。接触器控制策略包括顺序控制、辅助触点检测、温度监控、故障断电和背靠背MOS辅助控制,以确保系统的高效和安全运行。工程师在选择接触器型号、控制线圈、检测状态、软件冗余控制和预充失败保护等方面提供了具体建议。

weixin_43199439的博客 812

LSTM 深度解析从原理推演到现代序列建模的演进

LSTM(Long Short-Term Memory,长短期记忆网络)是一种特殊的递归神经网络(RNN),它通过引入记忆单元(Cell State)来解决普通RNN在长序列数据处理中的梯度消失问题。LSTM可以在长时间的序列中捕捉依赖关系,是一种非常适合处理时间序列、自然语言处理、语音识别等任务的深度学习模型。在LSTM中,记忆单元(Cell State)是一个贯穿整个序列的数据通道,用于存储和传递关键信息。记忆单元在LSTM的时间步之间保持信息的持久性,可以看作是一个长期记忆的“容器”。

hello.reader 3万+

[Spring Cloud] (2)gateway全局异常捕捉统一返回值

通常的处理过程为抛出异常->全局异常捕捉->返回前端通常在代码中,对于某个特定的条件,我们抛出一个自定义异常,并携带特定的状态码与状态描述。

让人人都会写程序 5950

Vue2 - 详细实现安装西瓜视频 xgplayer 插件详细配置及使用教程,利用西瓜视频播放器播放 mp4、flv、hls 格式视频文件及视频推流(直播或监控摄像头画面),支持移动端H5及PC网站!

vue2,nuxt2,西瓜视频,xgplayer,插件组件,xgplayer-hls,xgplayer-flv,xgplayer-mp4,播放视频点播和直播视频流,自定义播放器样式,截屏,监控视频,vue使用西瓜播放器播放flv、hls、mp4视频,截屏按钮,直播流,报错,黑屏,加载失败,苹果ios不兼容,重连,怎么改样式,很卡,详细教程,监控实时播放推流,倍速播放,在线flv在线推流地址,HLS播放,vue西瓜播放器,vue如何使用西瓜视频插件做直播推流回流,视频点播,flv在线视频流播放,截图功能,利用

🏆 前端领域优质创作者 1万+

第06课:服务网关

本文,我们将学习 Spring Cloud的另一个组件:zuul,它提供微服务的网关功能,即中转站,通过它提供的接口,可以转发不同的服务。在学习 zuul 之前,我们先接着上一篇的代码,来看看服务提供者是如何提供服务的。 在服务提供者的 module 下创建 HelloController 类,添加内容如下: @RestControlle...

weixin_34405925的博客 115

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SpringCloud统一异常处理

统一异常处理 新建异常处理包,异常处理类 添加@ControllerAdvice注解,作用是用来处理异常信息 注解之后添加需要处理异常的包 添加方法处理对应类型的异常 封装返回结果 package com.atguigu.gulimall.product.exception; import com.atguigu.common.utils.R; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.Binding

Wll_123456的博客 1993

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

SpringCloud:统一异常处理

SpringCloud:自定义异常处理1、引入依赖2、增加配置3.新建错误信息实体4、新建自定义异常5.新建error.ftl模板文件6、编写全局异常控制类7、编写测试Controller 1、引入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <ver

qq_43653657的博客 1564

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

feign返回结果统一处理_SpringCloud异常处理统一封装我来做-使用篇

SpringCloud异常处理统一封装我来做-使用篇 简介 重复功能我来写。在 SpringBoot 项目里都有全局异常处理以及返回包装等,返回前端是带上succ、code、msg、data等字段。单个项目情况下很好解决,当微服务模块多的情况下,很多情况开发都是复制原有代码进行构建另外一个项目的,导致这些功能升级需要修改多个服务,在这个基础上,我们封装了一个组件 unified-dispose-s...

weixin_39579127的博客 5689

基于SpringCloud封装统一的异常处理

在 Spring Cloud 中,可以通过自定义异常处理器来封装统一的异常处理逻辑。异常处理器能够捕获并处理应用程序中的异常,然后返回适当的错误响应。

882

【springCloud系统架构】统一的异常处理

这篇是承接上一篇的"优雅的异常处理",如果没有看过的,得先看上篇,才能更好的理解这篇【spring·Cloud系统架构】详细阐述如何优雅的处理异常(java) asas

seowen的开发 小本子 769

springboot dubbo统一异常处理

dubbo服务中为了对外隐藏具体异常,给上游调用方更直接的返回提示,可以通过dubbo的Filter方式和SpringAop方式 dubbo的Filter方式如下: 1、实现过滤器 import com.alibaba.dubbo.common.Constants; import com.alibaba.dubbo.common.extension.Activate; import c...

star245的专栏 4786

springcloud统一异常处理

异常处理流程 @ControllerAdvice public class BaseExceptionHandler { @ExceptionHandler(value = Exception.class) @ResponseBody public Result error(Exception e){ e.printStackTrace(); return new...

种一颗十年前的树 851

统一异常处理及其JSR 303

在某些情况下,特别是在复杂的应用程序中或涉及多层调用的情况下,异常可能会被捕获并在调用链上向上传播,导致异常的实际发生位置与最初引发异常的位置不同。另外,如果在统一异常处理过程中没有正确记录和打印详细的异常信息和堆栈跟踪,或者在捕获异常时没有保留原始异常信息,那么可能会导致异常的定位问题。它可以帮助我们集中管理异常逻辑,并对异常进行统一的处理和响应。异常信息的返回:在异常处理器中,根据请求的类型(如 Web 请求、API 请求等),生成适当的错误响应,包括状态码、错误消息、错误详情等,然后返回给客户端。

weixin_41545189的博客 885

23.SpringCloud实战项目-整合统一异常处理

简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程。对架构、业务、技术要点进行讲解。 PassJava 是一款Java面试刷题的开源系统,可以用零碎时间利用小程序查看常见面试题,夯实Java基础。 PassJava 项目可以教会你如何搭建SpringBoot项目,Spring Cloud项目 采用流行的技术,如 SpringBoot、MyBatis、Redis、 MySql、 MongoDB、 RabbitMQ、Elasticsearch,采用Docker容器化部署。

悟空聊架构的专栏 1291

SpringCloud的异常处理体系(一)

前言

hanxiaozhang的博客 1635

在springcloud中进行统一异常+自定义异常处理?

1.什么是统一异常处理? 软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所以代码中就会出现大量的try {...} catch {...} finally {...}代码块,不仅有大量的冗余代码,而且还影响代码的可读性。再回到我们的微服务中,我们也是使用这样的形式处理异常,那么我们导入文件的时候某列的数据不符合我们的标准,我...

爪哇爪哇的博客 2466
上一篇: springcloud gateway中进行统一处理api接口异常返回
下一篇: vscode执行npm时的一些错误及处理
蓝色格子
博客等级 码龄9年 129粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值