当前位置: 首页 > news >正文

SpringCloud-服务消费者Fegin调用时无法获取异常信息

一、前言


假设有以下需求:
  • 服务消费者A调用服务提供者B往MySQL新增一条人员信息
  • 服务提供者做了一个逻辑判断:若无该人员信息则新增,若已存在该人员信息,则返回给消费者异常状态码及异常信息:“请勿添加重复数据”

问题:

  • 通常新增、修改、删除服务无需返回,所以服务消费者无法获取服务提供者返回的异常状态码和异常信息
  • 对返回结果的封装一般在服务消费者,对公共接口的服务提供者通常不会做返回值封装

二、解决思路

  • 封装一个返回实体,作用于fegin调用时返回

三、实现

  • 返回实体
/*** 返回实体** @author Odinpeng* @since 2023/12/5*/
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Builder;
import lombok.Data;
import lombok.Getter;@Data
public class ResponseBody<T> {/*** 输出信息*/private String msg;/*** 返回数据*/@Builder.Default@JsonInclude(JsonInclude.Include.NON_NULL)private T body = null;/*** 状态码*/private int code;/*** 默认构造成功信息*/public ResponseBody() {this.code = ReturnStatus.SUCCESS.getVal();this.msg = ReturnStatus.SUCCESS.getMsg();}public ResponseBody(int code, String msg) {this.code = code;this.msg = msg;}public ResponseBody(int code, String msg, T body) {this.code = code;this.msg = msg;this.body = body;}public static <T> ResponseBody<T> success() {return new ResponseBody<>();}public static <T> ResponseBody<T> success(String msg) {return new ResponseBody<>(ReturnStatus.SUCCESS.getVal(), msg);}public static <T> ResponseBody<T> error(int code, String msg) {return new ResponseBody<>(code, msg);}public static <T> ResponseBody<T> error(String msg) {return new ResponseBody<>(ReturnStatus.ERROR.getVal(), msg);}public ResponseBody<T> code(int code) {this.code = code;return this;}public ResponseBody<T> msg(String msg) {this.msg = msg;return this;}public ResponseBody<T> body(T body) {this.body = body;return this;}
}@Getter
enum ReturnStatus {/*** 操作成功*/SUCCESS(200, "操作成功"),/*** 系统内部错误*/ERROR(500, "系统内部错误");/*** 状态*/private final int val;/*** 信息输出*/private final String msg;/*** 有参构造** @param val 状态码* @param msg 消息体*/ReturnStatus(int val, String msg) {this.val = val;this.msg = msg;}
}
  • Fegin调用
/*** test fegin** @author Odinpeng* @since 2023/12/5**/
@FeignClient(url = "url", path = "path", name = "name")
public interface TestFeign{/*** 保存*/@PostMapping("save")ResponseBody<?> save(@RequestBody Body body);/*** 修改*/@PostMapping("update")ResponseBody<?> update(@RequestBody Body body);/*** 删除*/@PostMapping("delete")ResponseBody<?> delete(@RequestBody Integer index);
}
http://www.lryc.cn/news/253622.html

相关文章:

  • re:invent 2023 Amazon Q 初体验
  • 认知觉醒(四)
  • AI模型部署 | onnxruntime部署YOLOv8分割模型详细教程
  • 模拟电路学习笔记(一)之芯片篇(持续更新)
  • 如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)
  • qt 5.15.2 主窗体事件及绘制功能
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • Redis_主从复制、哨兵模式、集群模式详解
  • 关于神舟-战神TA5NS系统重装问题
  • 前端大文件上传webuploader(react + umi)
  • 人大金仓(kingbase)数据库常用sql命令
  • HashMap相关专题
  • threejs WebGLRenderer 像素比对画布大小的影响
  • RocketMQTemplate.send() 与 RocketMQTemplate.syncSend() 方法详解
  • 波奇学C++:类型转换和IO流
  • 集成开发环境 PyCharm 的安装【侯小啾python基础领航计划 系列(二)】
  • Java核心知识点整理大全27-笔记(已完结)
  • 1. 使用poll或epoll创建echo服务器
  • 【对象数组根据属性排序】
  • BACnet I/O模块:楼宇自动化的未来选择
  • android项目实战之使用框架 集成多图片、视频的上传
  • MyBatis查询优化:枚举在条件构建中的妙用
  • Isaac Sim教程04 Isaac Sim的高级使用
  • 《数据结构、算法与应用C++语言描述》-线索二叉树的定义与C++实现
  • 删除误提交的 git commit
  • 机器学习---pySpark案例
  • 【链表Linked List】力扣-24 两两交换链表中的节点
  • 企业微信协议开发,API接口调用
  • 代码随想录算法训练营 ---第五十五天
  • 【Intel/Altera】 全系列FPGA最新汇总说明,持续更新中