spring cloud openfeign中@RequestMapping和@FeginClient注解不能同时使用的问题

项目启动异常如下

Caused by: java.lang.IllegalArgumentException: @RequestMapping annotation not allowed on @FeignClient interfacesat org.springframework.cloud.openfeign.support.SpringMvcContract.processAnnotationOnClass(SpringMvcContract.java:180)at feign.Contract$BaseContract.parseAndValidateMetadata(Contract.java:89)at org.springframework.cloud.openfeign.support.SpringMvcContract.parseAndValidateMetadata(SpringMvcContract.java:187)at feign.Contract$BaseContract.parseAndValidateMetadata(Contract.java:62)at feign.ReflectiveFeign$ParseHandlersByName.apply(ReflectiveFeign.java:151)at feign.ReflectiveFeign.newInstance(ReflectiveFeign.java:49)at feign.Feign$Builder.target(Feign.java:269)at org.springframework.cloud.openfeign.DefaultTargeter.target(DefaultTargeter.java:30)at org.springframework.cloud.openfeign.FeignClientFactoryBean.loadBalance(FeignClientFactoryBean.java:373)at org.springframework.cloud.openfeign.FeignClientFactoryBean.getTarget(FeignClientFactoryBean.java:421)at org.springframework.cloud.openfeign.FeignClientFactoryBean.getObject(FeignClientFactoryBean.java:396)at org.springframework.cloud.openfeign.FeignClientsRegistrar.lambda$registerFeignClient$0(FeignClientsRegistrar.java:235)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1249)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)... 84 common frames omitted

源码如下

org.springframework.cloud.openfeign.support.SpringMvcContract
@Overrideprotected void processAnnotationOnClass(MethodMetadata data, Class<?> clz) {RequestMapping classAnnotation = findMergedAnnotation(clz, RequestMapping.class);if (classAnnotation != null) {LOG.error("Cannot process class: " + clz.getName()+ ". @RequestMapping annotation is not allowed on @FeignClient interfaces.");throw new IllegalArgumentException("@RequestMapping annotation not allowed on @FeignClient interfaces");}}

项目之前运行没问题,考虑到这个问题是升级的问题导致的,可以通过修改 feign 的契约来实现,正好发现了一篇文章是讲这个的。

https://blog.csdn.net/qq_44734154/article/details/128624881

核心点如下

仿照 SpringMvcContract 新建一个类,例如 CustomSpringMvcContract,将 SpringMvcContract 代码全部复制过来,然后把 SpringMvcContract 对应的代码替换为 CustomSpringMvcContract,processAnnotationOnClass() 中最后的代码做一下调整

@Overrideprotected void processAnnotationOnClass(MethodMetadata data, Class<?> clz) {if (clz.getInterfaces().length == 0) {RequestMapping classAnnotation = (RequestMapping) AnnotatedElementUtils.findMergedAnnotation(clz, RequestMapping.class);if (classAnnotation != null && classAnnotation.value().length > 0) {String pathValue = Util.emptyToNull(classAnnotation.value()[0]);pathValue = this.resolve(pathValue);if (!pathValue.startsWith("/")) {pathValue = "/" + pathValue;}// 源码调整,将// data.template().insert(0, pathValue);// 替换为data.template().uri(pathValue);}}}

openfeign 的默认配置位于

org.springframework.cloud.openfeign.FeignClientsConfiguration

其中,需要将 Contract 进行覆盖即可

	@Bean@ConditionalOnMissingBeanpublic Contract feignContract(ConversionService feignConversionService) {boolean decodeSlash = feignClientProperties == null || feignClientProperties.isDecodeSlash();return new SpringMvcContract(this.parameterProcessors, feignConversionService, decodeSlash);}

如下

import feign.Contract;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.cloud.openfeign.AnnotatedParameterProcessor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.convert.support.DefaultConversionService;import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.List;@Configuration(proxyBeanMethods = false)
public class CustomFeignClientsConfiguration {private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());@Autowired(required = false)private List<AnnotatedParameterProcessor> parameterProcessors = new ArrayList<>();@Bean@ConditionalOnMissingBean@Primarypublic Contract feignContract() {logger.info("feignContract");return new CustomSpringMvcContract(this.parameterProcessors, new DefaultConversionService());}
}

启动即可。

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

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

相关文章

【zip密码】zip压缩包删除密码方法

Zip压缩包设置设置了密码&#xff0c;想要删除密码&#xff0c;除了将压缩包解压出来之后再将文件压缩为不带密码的压缩文件以外&#xff0c;还有一种删除密码的方法。设置方法如下&#xff1a; 右键点击zip文件&#xff0c;找到打开方式&#xff0c;以Windows资源管理器方式打…

暴力递归转动态规划(四)

题目 规定1对应A、2对应B、3对应C…26对应Z&#xff0c;那么一个数字字符串比如"111"&#xff0c;就可以转化为&#xff1a;“AAA”、“KA"或"AK”&#xff0c;给定一个数字字符组成的字符串str&#xff0c;返回有多少种转化结果。 解释一下&#xff0c;字…

VBA技术资料MF52:VBA_在Excel中突出显示前 10 个值

【分享成果&#xff0c;随喜正能量】一言之善&#xff0c;重于千金。善良不分大小&#xff0c;有时候你以为的一句话&#xff0c;小小的举手之劳&#xff0c;也可能就是别人的救赎&#xff01;不要吝啬你的善良&#xff0c;因为你永远不知道那小小的善良能给多少人带来光明。。…

【 ARMv9 Cluster BUS QoS 配置】

文章目录 ARM Cluster QoS ARM Cluster QoS QoS&#xff08;Quality of Service&#xff0c;服务质量&#xff09;在 ARM 架构中&#xff0c;主要指的是一种机制&#xff0c;它可以控制和管理系统资源&#xff08;如内存、总线带宽等&#xff09;的使用&#xff0c;以满足各种…

Cyber RT学习---5.Cyber RT通信机制解析与实践

5.Cyber RT通信机制解析与实践 5.1 通信机制简介 5.1.1 话题通信 模式&#xff1a; 以发布订阅的方式实现不同节点之间数据交互的通信模式。 如图1-1所示&#xff0c;Listener-Talker通信首先创建了两个Node&#xff0c;分别是Talker Node和 Listener Node。 每个Node实例化…

【B树 B+树】B树、B+树理论

目录 引入B树B树定义和性质m阶B树核心特性 B树B树的查找 引入B树 满足上面两个策略就是B树&#xff1a; m 叉查找树中&#xff0c;规定除了根节点外&#xff0c;任何结点至少有 ⌈ m / 2 ⌉ \lceil m/2 \rceil ⌈m/2⌉ 个分叉&#xff0c;即至少含有 ⌈ m / 2 ⌉ \lceil m/2 \…

LARGE LANGUAGE MODEL AS AUTONOMOUS DECISION MAKER

本文是LLM系列文章&#xff0c;针对《LARGE LANGUAGE MODEL AS AUTONOMOUS DECISION MAKER》的翻译。 作为自主决策者的大语言模型 摘要1 引言2 前言3 任务形式化4 方法5 实验6 相关工作7 结论 摘要 尽管大型语言模型&#xff08;LLM&#xff09;表现出令人印象深刻的语言理解…

Python爬虫——新手使用代理ip详细教程

Python代理IP爬虫是一种可以让爬虫拥有更多网络访问权限的技术。代理IP的作用是可以为爬虫提供多个IP地址&#xff0c;从而加快其爬取数据的速度&#xff0c;同时也可以避免因为访问频率过高而被网站封禁的问题。本文将介绍如何使用Python实现代理IP的爬取和使用。 一、代理IP的…

RHCA之路---EX280(10)

RHCA之路—EX280(10) 1. 题目 On master.lab.example.com install the OpenShift Mertics component with the following requirements: Use the storage /exports/metrics for cassandra storage. You can use the files on http://materials.example.com/exam280/storage fo…

第十八章 ObjectScript - 使用例程

文章目录 第十八章 ObjectScript - 使用例程例程Procedures, Functions, and Subroutines 过程、函数和子程序procedurefunctionsubroutine 第十八章 ObjectScript - 使用例程 例程 可以将例程视为 ObjectScript 程序。例程可以从头开始编写&#xff0c;也可以在编译类时自动…

超时取消子线程任务

文章目录 前言一、编码思路二、使用步骤直接上代码 总结 前言 问题背景: 主线程需要执行一些任务,不能影响主任务执行,这些任务有超时时间,当超过处理时间后,应该不予处理;如果未超时,应该获取到这些任务的执行结果; 一、编码思路 由于主线程正常执行不能影响,任务会处理很久…

【Java Web】论坛实现私信列表

私信列表 查询当前用户的会话列表&#xff0c;每个会话一条最新的私信&#xff1b;支持分页显示&#xff1b; 私信详情 查询某个会话所包含的私信&#xff1b;支持分页显示。 一、数据访问层 message表中各个字段组成&#xff1a; CREATE TABLE message (id int NOT NULL A…

Leetcode116. 填充每个节点的下一个右侧节点指针中等1K

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的…

Postgresql 阿里云部署排雷

启动服务bug&#xff1a; 根据你的输出&#xff0c;可以看到 PostgreSQL 服务启动失败&#xff0c;并且显示以下错误消息&#xff1a; pg_ctl: cannot be run as root Please log in (using, e.g., "su") as the (unprivileged) user that will own the server proc…

海康威视二次开发适配安卓电视盒子

收到一个需求&#xff0c;需要在安卓电视盒子上适配海康威视摄像头视频&#xff1a; 1.类似电视家app界面&#xff0c;左边滑动菜单显示通道列表、设置按钮&#xff0c;遥控器呼出菜单。 2.遥控器操作&#xff1a;切换视频通道、云台上下左右控制、缩放等。 3.服务器域名、用…

React 18 迁移状态逻辑至 Reducer 中

参考文章 迁移状态逻辑至 Reducer 中 对于拥有许多状态更新逻辑的组件来说&#xff0c;过于分散的事件处理程序可能会令人不知所措。对于这种情况&#xff0c;可以将组件的所有状态更新逻辑整合到一个外部函数中&#xff0c;这个函数叫作 reducer。 使用 reducer 整合状态逻…

FPGA输出lvds信号点亮液晶屏

1 概述 该方案用于生成RGB信号&#xff0c;通过lvds接口驱动逻辑输出&#xff0c;点亮并驱动BP101WX-206液晶屏幕。 参考&#xff1a;下面为参考文章&#xff0c;内容非常详细。Xilinx LVDS Output——原语调用_vivado原语_ShareWow丶的博客http://t.csdn.cn/Zy37p 2 功能描述 …

RabbitMQ的安装和配置

将RabbitMQ文件夹传到linux根目录 开启管理界面及配置

【VSCode】文件模板创建及使用.md

背景 最近使用VSCode学习Vue项目比较频繁&#xff0c;每次创建Vue文件都要手动写重复代码&#xff0c;特别麻烦&#xff0c;就上网查找自动生成代码的说明&#xff0c;结果发现VSCode有代码模板&#xff0c;怪怪&#xff0c;感觉发现新大陆了(low!)。 配置 打开配置 方式一&a…

手机电脑scoket通信 手机软件 APP inventor 服务端程序python

python scoket 通信 再帮助同学坐课题的时候接触到了scoket通信&#xff0c;了解到这应该是基层网络通信的原理&#xff0c;于是就导出搜索了一下相关的资料&#xff0c;简单来说scoket通信就是&#xff0c;可以让不同设备在同一个网络环境的条件下&#xff0c;可以实现相互通…