有个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/
转载文章受原作者版权保护。转载请注明原作者出处!