openfeign客户端A调用服务B,服务B抛出异常时,客户端A接收的几种情况

openfeign客户端A调用服务B,服务B抛出异常时,客户端A接收的几种情况

  • 一、openfeign客户端调用远程服务时,远程服务抛出异常后,根据调用方法的返回类型的不同,会有不同的返回结果
    • 0 先看非openfeign调用的情况:controller直接抛出异常
    • 1 openfeign客户端A调用服务B:调用方法返回String类型
      • 结论 :openfeign调用时,如果方法返回类型为String类型时,则与非openfeign调用返回信息是一致的。
    • 2 openfeign客户端A调用服务B:调用方法返回 非 String类型
      • 结论 : openfeign客户端A调用服务B:调用方法返回 非 String类型时,报错信息为:“Could not extract response: no suitable HttpMessageConverter found for response type [class java.lang.Integer] and content type [text/html;charset=UTF-8]” (这里以Integer为返回类型)
    • 3 服务B返回null值的情况
      • a 报错时,参考:
      • b 不报错,无话可说
      • c 待跟踪确认。。。

一、openfeign客户端调用远程服务时,远程服务抛出异常后,根据调用方法的返回类型的不同,会有不同的返回结果

0 先看非openfeign调用的情况:controller直接抛出异常

controller层代码,其他一切使用默认,不做任何配置:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ClassForTest {
	Logger logger = LoggerFactory.getLogger(this.getClass());

	@Autowired
	private XlServiceImpl xlServiceImpl;

	@GetMapping("/dosth")
	public String doSth() throws Exception {
		throw new Exception("测试抛出异常!");
//		String affect = "";
//		affect = xlServiceImpl.doInsert();
//		return affect;
	}
}

访问接口/dosth,调用controller方法:
在这里插入图片描述

1 openfeign客户端A调用服务B:调用方法返回String类型

  • openfeign客户端代码
    controller代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ClassForTest {
	Logger logger = LoggerFactory.getLogger(this.getClass());

	@Autowired
	private XlServiceImpl xlServiceImpl;

	@GetMapping("/dosth")
	public String doSth() throws Exception {
		String affect = "";
		affect = xlServiceImpl.doInsert();
		return affect;
	}
}

serviceImpl层关键代码代码 : 使用openfeign的客户端--xlFeignClient进行调用并且返回String类型

	public String doInsert() throws Exception {
		String ir = "";
		try {
			ir = xlFeignClient.invokeBusi();
		} catch (Exception e) {
			logger.error(e.getMessage());
		}
		return ir;
	}

openfeign的客户端--xlFeignClient代码如下:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;

@FeignClient(contextId = "xl20231108", name = "checklist-service")
public interface XlFeignClient {
	@PostMapping("/checklistservice/xl/test")
	String invokeBusi();
}
  • 服务B的代码
    controller层代码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class XlContoller {

	@Autowired
	private com.omomcam.checklistservice.service.impl.XlBusiServiceImpl XlBusiServiceImpl;

	@PostMapping("/checklistservice/xl/test")
	public String invokeBusi() {
		return XlBusiServiceImpl.test();
	}
}

sericeImpl层代码:


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;


@Service
@Transactional(rollbackFor = Exception.class)
public class XlBusiServiceImpl {
	
	@Autowired
	private XlBusiMapper xlBusiMapper;
	
	public String test() {
		xlBusiMapper.insert1();
		int x = 0;
		int y = 3 / x ;
		return "这是返回值!";
	}
	
}

  • 访问接口/dosth,调用controller方法,结果如下:
    在这里插入图片描述

结论 :openfeign调用时,如果方法返回类型为String类型时,则与非openfeign调用返回信息是一致的。

解释:服务抛出了异常信息,返回的如上图‘Whitelabel Error Page....’的信息,其格式为text/html,而String又可以正常接收这种格式的信息!

2 openfeign客户端A调用服务B:调用方法返回 非 String类型

将返回类型改为自定义类型或者Integer获取其他非String类型,这里以Integer为例:
openfeign客户端修改返回类型为Integer,其他的对应修改即可

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;

@FeignClient(contextId = "xl20231108", name = "checklist-service")
public interface XlFeignClient {
	@PostMapping("/checklistservice/xl/test")
	Integer invokeBusi();
	
}

访问接口/dosth,调用controller方法,结果如下:
在这里插入图片描述
解释: 在调用服务B时返回的数据为 text/html ,而方法接收类型为Integer,二者不一致,并且无法正确转换, 所以报了如上错误。

结论 : openfeign客户端A调用服务B:调用方法返回 非 String类型时,报错信息为:“Could not extract response: no suitable HttpMessageConverter found for response type [class java.lang.Integer] and content type [text/html;charset=UTF-8]” (这里以Integer为返回类型)

3 服务B返回null值的情况

服务端B返回null值,客户端有时报错!有时不报错!需跟踪确认—2023年11月10日10:29:16

a 报错时,参考:

OpenFeign客户端调用,服务端查询结果为null并返回给feign客户端,引发客户端报错

b 不报错,无话可说

c 待跟踪确认。。。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在vue中如果头像为空时用姓名第一个字当头像

业务场景:当个人资料或者用户头像没有图片时&#xff0c;默认使用户名字中第一个汉字做头像。 效果图&#xff1a; 完整代码&#xff1a; <el-avatarsize"large" style"width: 45px; height: 45px; line-height: 45px; font-size: 24px"v-if"…

海淀区委网信办领导到中睿天下调研

近日&#xff0c;北京市海淀区委宣传部副部长&#xff0c;海淀区委网信办主任黄英、海淀区委网信办副主任陈魁一行到中睿天下北京总部调研&#xff0c;中睿天下副总经理李小琼、联合创始人魏海宇、国防营销中心总经理吕宗辉参加。 海淀区委网信办一行参观了中睿天下展厅&#x…

元核云亮相金博会,智能质检助力金融合规

11月初&#xff0c;第五届中新&#xff08;苏州&#xff09;数字金融应用博览会&#xff5c;2023金融科技大会在苏州国际博览中心举办&#xff0c;围绕金融科技发展热点领域及金融行业信息科技领域重点工作&#xff0c;分享优秀实践经验&#xff0c;探讨数字化转型路径与未来发…

基于IGT-DSER智能网关实现GE的PAC/PLC与罗克韦尔(AB)的PLC之间通讯

工业自动化领域的IGT-DSER智能网关模块支持GE、西门子、三菱、欧姆龙、AB等各种品牌的PLC之间通讯(相关资料下载)&#xff0c;同时也支持PLC与Modbus协议的工业机器人、智能仪表等设备通讯。网关有多个网口、串口&#xff0c;也可选择WIFI无线通讯。无需编程开发&#xff0c;只…

3线硬件SPI+DMA驱动 HX8347 TFT屏

3线硬件SPIDMA驱动 HX8347 TFT屏&#xff0c;实现用DMA清屏。 参考&#xff1a;基于stm32 标准库spi驱动st7789彩屏TFT(使用DMA)-技术天地-深圳市修德电子有限公司 一、源码 HX8347.h #ifndef USER_HX8347_H_ #define USER_HX8347_H_#define SPI_hardware #define SPI_hardw…

基于表面电势的AlGaN/GaN MODFET紧凑模型

标题&#xff1a;A Surface-Potential-Based Compact Model for AlGaN/GaN MODFETs 来源&#xff1a;IEEE TRANSACTIONS ON ELECTRON DEVICES&#xff08;11年&#xff09; 摘要 - 本文首次构建了基于表面势&#xff08;SP&#xff09;的AlGaN/GaN调制掺杂场效应晶体管&#…

说说地址栏输入 URL 敲下回车后发生了什么?

面试官&#xff1a;说说地址栏输入 URL 敲下回车后发生了什么? 一、简单分析 简单的分析&#xff0c;从输入 URL到回车后发生的行为如下&#xff1a; URL解析DNS 查询TCP 连接HTTP 请求响应请求页面渲染 二、详细分析 URL解析 首先判断你输入的是一个合法的 URL 还是一个…

C++初阶(九)内存管理

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、C/C内存分布1、选择题2、填空题3、sizeof 和 strlen 区别&#xff1f;4、总结 二、 C语言…

19.8 Boost Asio 异或加密传输

异或加密是一种对称加密算法&#xff0c;通常用于加密二进制数据。异或操作的本质是对两个二进制数字进行比较&#xff0c;如果它们相同则返回0&#xff0c;如果不同则返回1。异或加密使用一把密钥将明文与密文进行异或运算&#xff0c;从而产生密文。同时&#xff0c;使用相同…

数字马力笔试面试复盘

笔试——10月9日19&#xff1a;00 单选&#xff1a;30题 16.如何获取AJAX 请求的响应状态码? A通过AJAX对象的 statusCode 属性获取 B通过AJAX对象的responseText 属性获取C通过AJAX对象的status 属性获取 D通过AJAX对象的responseCode属性获取 答案&#xff1a;可以通过AJAX…

Python学习笔记--枚举类的使用

一、枚举类的使用 实际开发中&#xff0c;我们离不开定义常量&#xff0c;当我们需要定义常量时&#xff0c;其中一个办法是用大写变量通过整数来定义&#xff0c;例如月份&#xff1a; JAN 1 FEB 2 MAR 3 ... NOV 11 DEC 12当然这样做简单快捷&#xff0c;缺点是类型是…

paddleOcr训练一个属于自己的模型

自己配置开发环境的时候踩了不少坑&#xff0c;现在记录下来&#xff0c;以后需要了可以直接找到现成的代码&#xff0c;也希望能够帮到有需要的小伙伴 目录 &#xff08;一&#xff09;、运行环境搭建1、Anaconda部分Anaconda安装Anaconda创建虚拟环境指令Anaconda Prompt工作…

xilinx primitives(原语)

Xilinx的原语分为10类&#xff0c;包括&#xff1a;计算组件&#xff0c;IO端口组件&#xff0c;寄存器/锁存器&#xff0c;时钟组件&#xff0c;处理器组件&#xff0c;移位寄存器&#xff0c;配置和检测组件&#xff0c;RAM/ROM组件&#xff0c;Slice/CLB组件&#xff0c;G-t…

微信号绑定50个开发者小程序以后超额如何删除不用的

我们在开发微信小程序的时候&#xff0c;当前开发者工具登录的必须是该小程序的开发者才能进行小程序的开发&#xff0c;添加开发者的步骤是&#xff1a; 添加开发者 1、进入微信开放平台&#xff0c;然后扫码进入管理平台 2、找到下图所示位置 3:、输入要添加的微信账号&am…

工商银行卡安全码怎么看

工商银行的安全码&#xff0c;作为一项至关重要的安全措施&#xff0c;旨在保护用户的银行账户和交易安全。为了查看工商银行的安全码用户需要按照以下步骤操作&#xff1a; 首先&#xff0c;用户需要使用电脑或手机访问工商银行的网上银行平台。在平台首页&#xff0c;用户需要…

Git 入门使用

一、Git 入门 1.1 Git简介 Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。Git是由Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 Git是目前世界上最先进的分布式版本控制系统&#xff0c;没有之一&a…

千城千站系统源码+SEO关键词推广优化 万能通用版 带完整的搭建教程

大家好啊&#xff0c;源码小编来给大家分享一款超级好用的千城千站系统源码。其实最近大家会发现做SEO排名做的最好的就是千城千站系统&#xff0c;排名好&#xff0c;流量高&#xff0c;其实这都是用千城千站系统做的。而这一套系统搭建起来十分简单&#xff0c;只要把里面的内…

LCD英文字模库(16x8)模拟测试程序

字模 字模&#xff0c;就是把文字符号转换为LCD能识别的像素点阵信息。 电子发烧友可能都熟悉字模的用途。就是调用者通过向LCD模块发送字模数据&#xff0c;LCD根据字模数据在LCD面板上相应的像素描绘出图形或文字。 现在&#xff0c;大部分的LCD都内置了字模库&#xff0c…

【脑源成像】术前癫痫的电源成像 评价:现状与未来展望

Electric source imaging for presurgical epilepsy evaluation: current status and future prospects 术前癫痫的电源成像 评价:现状与未来展望论文下载&#xff1a;算法程序下载&#xff1a;摘要1 项目介绍1.1. 选择要综述的文章2. 电源成像的基本原理4. ESI的实践方面4.1脑…

Nodejs沙箱绕过

目录 JavaScript和Nodejs介绍 沙箱&#xff08;sandbox&#xff09; 简单的介绍一下vm模块 下面介绍几种绕过方式 方法1&#xff1a;利用Function构造函数沙箱逃逸&#xff0c;执行命令 方法2&#xff1a;利用argument.callee.caller实现 方法3&#xff1a;利用ES6的 pro…