重写Feign编码器

有个spring cloud 架构的项目需要调用php小组的api接口,但php提供的接口入参大部分是下划线命名,而Java这边的实体类是按照驼峰编写,如果使用Fegin调用会导致php无法接收参数,例如userId传过去后,由于php那边是user_id,这样php接口无法识别,所以针对这个问题进行了如下特殊处理,主要是通过重写fegin的默认编码器实现

编码器原理

Spring Cloud Feign 的编码器、解码器和客户端都是支持自定义扩展,可以对请求以及结果和发起请求的过程进行自定义实现,Feign 默认encoder实现是SpringEncoder,默认decocer实现是ResponseEntityDecoder,另外还有一些其它的编解码器。

Encoder/ Decoder 实现说明 JacksonEncoder,JacksonDecoder 基于 Jackson 格式的持久化转换协议 GsonEncoder,GsonDecoder 基于Google GSON 格式的持久化转换协议 SaxEncoder,SaxDecoder 基于XML 格式的Sax 库持久化转换协议 JAXBEncoder,JAXBDecoder 基于XML 格式的JAXB 库持久化转换协议 ResponseEntityEncoder,ResponseEntityDecoder Spring MVC 基于 ResponseEntity< T > 返回格式的转换协议 SpringEncoder,SpringDecoder 基于Spring MVC HttpMessageConverters 一套机制实现的转换协议 ,应用于Spring Cloud 体系中

实现方案

指定编码器后,所有经过Fegin请求都会走这个编码器,这样会导致原有的业务受到影响,为了不影响原有的业务,需要通过标识来区分到底什么字段能转下划线,所以在上面的代码里,我写了一个IgnoreFeginCamelCase注解,用于判断被IgnoreFeginCamelCase修饰的字段才进行下划线转换。

Original: https://www.cnblogs.com/zdd-java/p/15524804.html
Author: 达兔哥
Title: 重写Feign编码器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/576120/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Redis——数据操作

    2022-09-20 Redis——select Redis数据库中的数据库的个数为: 16个,使用0号数据库开始的,到第15个数据库结束。 在ubantu中,进入Redis客户端…

    数据库 2023年6月14日
    069
  • 5_SpringMVC

    一. 什么是MVC框架 MVC全名是Model View Controller, 是模型(model), 视图(view), 控制器(controller)的缩写, 一种软件设计典…

    数据库 2023年6月11日
    0100
  • 集成 nacos注册中心配置使用

    pom <span class="hljs-tag"><<span class="hljs-name">pro…

    数据库 2023年6月6日
    098
  • Mysql性能调优-工具篇

    首先祭出官方文档(这是5.7的,请自行选择版本): 如果你不想读英语,只需阅读这篇文章: [En] If you don’t want to read English,…

    数据库 2023年5月24日
    082
  • Java面试题(二)–MySQL

    1 存储引擎 1、简单描述一个Mysql的内部结构? MySQL的基本架构示意图:大体来说,MySQL可以分为 server层和 存储引擎层两部分。 ① server层包括连接器、…

    数据库 2023年5月24日
    094
  • MySQL45讲之InnoDB加锁规则

    前言 本文介绍 MySQL InnoDB 的加锁规则,以及一些需要注意的点。 总结 可重复读隔离级别下,两个原则,两个优化,一个 bug: 原则1:加锁的基本单位是 next-ke…

    数据库 2023年5月24日
    084
  • MySQL锁:01.总览

    锁总览 锁的作用 加锁流程 锁对数据库的影响 锁等待 死锁 锁类型 锁范围 锁方式 全局锁 全局读锁 全局QC锁 QC锁存在的问题: 备份锁 backup lock MDL锁 MD…

    数据库 2023年6月16日
    0124
  • leetcode 1110. Delete Nodes And Return Forest 删点成林(中等)

    一、题目大意 给出二叉树的根节点 root,树上每个节点都有一个不同的值。 如果节点值在 to_delete 中出现,我们就把该节点从树上删去,最后得到一个森林(一些不相交的树构成…

    数据库 2023年6月16日
    0102
  • 3、数组、集合、Lambda、Stream与Optional类

    一、数组: 数组保存在JVM堆内存中 1、数组的创建: (1)、一维数组创建方式一: //一维数组方式一 Integer[] array01 = {1,2,3}; System.o…

    数据库 2023年6月6日
    098
  • 译文 | MySQL 8.0 密码管理策略(一)

    MySQL 8.0 在密码管理方面有很多改善,本文将介绍以下两个特性。 密码重用策略 生成随机密码 简单地说,当您设置新密码时,您可以限制使用以前使用的密码。有两种策略: [En]…

    数据库 2023年5月24日
    082
  • 整理记录一些好用的随机图API

    最近自己博客使用的随机图API有些不稳定,自己又去搜集了一些有意思的随机图API,这里做一个整理记录 注意!!!本文链接最后测试时间—-2021年11月21日 主题作者…

    数据库 2023年6月11日
    076
  • StoneDB 亮相中国信通院OSCAR开源产业大会,石原子科技正式加入科技制造开源社区!

    2022 年 9 月 16 日,由中国信息通信研究院(以下简称”信通院”)主办的”2022 OSCAR 开源产业大会”活动于北京成功…

    数据库 2023年6月11日
    093
  • 23种设计模式之命令模式

    文章目录 概述 命令模式的优缺点 命令模式的应用场景 命令模式的结构和实现 * 模式的结构 模式的实现 总结 ; 概述 命令模式(Command Pattern)是一种数据驱动的设…

    数据库 2023年6月6日
    0126
  • 如何实现跨域?

    https://blog.csdn.net/meism5/article/details/90414283 Original: https://www.cnblogs.com/cr…

    数据库 2023年6月16日
    086
  • 8 int和Integer的区别

    数据类型 int是基本数据类型,Integer是int的包装类,属于引用类型 初始值 int的初始值为0,Integer的初始值为null 存储位置 int是直接存储在栈中的,In…

    数据库 2023年6月6日
    095
  • 2 Java中 == 和 equals 和 hashCode 的区别

    ==是一个比较运算符; 若比较的是基本数据类型,则比较的是值; 若比较的是引用数据类型,则比较的是它们在内存中的内存地址。 说明:对象是存放在堆中,栈中存放的是对象的引用,因此==…

    数据库 2023年6月6日
    097
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球