如今,越来越多的Spring MVC项目都选择使用FastJson做为Json解析框架,并且都会添加类似如下配置以支持FastJson:

@Configuration

public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

@Override

public void configureMessageConverters(

List> converters) {

FastJsonHttpMessageConverter converter =

new FastJsonHttpMessageConverter();

List supportedMediaTypes = new ArrayList();

MediaType mediaTypeJson =

MediaType.valueOf(MediaType.APPLICATION_JSON_UTF8_VALUE);

supportedMediaTypes.add(mediaTypeJson);

converter.setSupportedMediaTypes(supportedMediaTypes);

FastJsonConfig config = new FastJsonConfig();

config.getSerializeConfig()

.put(Json.class, new SwaggerJsonSerializer());

config.setSerializerFeatures(

SerializerFeature.DisableCircularReferenceDetect);

converter.setFastJsonConfig(config);

converters.add(converter);

}

}

但是,在使用Feign的Spring Cloud微服务项目中,要特别注意需要为Feign单独配置FastJson,因为Feign并不共用Spring MVC的消息转换器链,而且它默认使用的是Jackson Json解析库。这会导致混乱,甚至出现序列化/反序列化错误。

举个例子:

Bean的属性名与Json的属性名不一样,使用@JSONField()注解做转换。

public class Bean {

@JSONField(name = "json_name")

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

但是,这个注解只有FastJson认得,Jackson并不认。所以在Feign将Bean转成Json的时候,将把name作为key名称输出(而我期望的时候,输出json_name的key名称),导致在Feign的服务端,以Spring MVC方式接收的时候,FastJson由于找不到json_name而不能正确给Bean的name属性赋值。

解决办法就是给Feign也添加FastJson的支持,如下:

@Configuration

public class FeignConfig {

@Bean

public Encoder feignEncoder() {

return new SpringEncoder(feignHttpMessageConverter());

}

private ObjectFactory feignHttpMessageConverter() {

final HttpMessageConverters httpMessageConverters =

new HttpMessageConverters(getFastJsonConverter());

return () -> httpMessageConverters;

}

private FastJsonHttpMessageConverter getFastJsonConverter() {

FastJsonHttpMessageConverter converter =

new FastJsonHttpMessageConverter();

List supportedMediaTypes = new ArrayList<>();

MediaType mediaTypeJson =

MediaType.valueOf(MediaType.APPLICATION_JSON_UTF8_VALUE);

supportedMediaTypes.add(mediaTypeJson);

converter.setSupportedMediaTypes(supportedMediaTypes);

FastJsonConfig config = new FastJsonConfig();

config.getSerializeConfig()

.put(Json.class, new SwaggerJsonSerializer());

config.setSerializerFeatures(

SerializerFeature.DisableCircularReferenceDetect);

converter.setFastJsonConfig(config);

return converter;

}

}

feign 序列化_Spring Cloud Feign 配置 FastJson相关推荐

  1. 自定义报错返回_Spring Cloud Feign的使用和自定义配置

    在上一篇文章 null:Spring Cloud 自定义Eureka Ribbon负载均衡策略​zhuanlan.zhihu.com 中,我们使用Ribbon自定义的策略实现了负载均衡,接下来我们介绍 ...

  2. feign 序列化_Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题...

    LocalDate.LocalTime.LocalDateTime是Java 8开始提供的时间日期API,主要用来优化Java 8以前对于时间日期的处理操作.然而,我们在使用Spring Boot或使 ...

  3. @scheduled注解配置时间_Spring Cloud 之配置服务器(下)配置刷新

    学习目标 本文所讲内容为上一文的后续,我们在上一文中学习了什么是 Spring Cloud 的配置服务器:如何使用两种方式搭建 Spring Cloud Config Server 以及客户端如何连接 ...

  4. java如何实现配置文件动态刷新_Spring Cloud 动态刷新配置信息教程详解

    有时候在配置中心有些参数是需要修改的,这时候如何不重启而达到实时生效的效果呢? 添加依赖 ... org.springframework.boot spring-boot-starter-actuat ...

  5. feign 序列化_Spring Feign 序列化机制

    Spring Cloud封装Feign,直接使用Spring MVC注解以及HttpMessageConverters来序列化. Spring Boot有autoconfigure机制,当spring ...

  6. feign 序列化_自定义 feign 反序列化时间字符格式

    feign client 默认配置类:默认的配置类为FeignClientsConfiguration 配置了解码和编码. 当请求Feign Client的方法执行时会被 SynchronousMet ...

  7. feign获取outstream_Spring Cloud Feign接口返回流

    身无彩凤双飞翼,心有灵犀一点通. 服务提供者 @GetMapping("/{id}") public void queryJobInfoLogDetail(@PathVariabl ...

  8. Spring Cloud Feign原理详解

    目录 1.什么是Feign? 2.Open Feign vs Spring Cloud Feign 2.1.OpenFeign 2.2.Spring Cloud Open Feign 3.Spring ...

  9. Spring Cloud Feign 请求压缩 、Feign的日志级别配置

    一.Spring Cloud Feign 请求压缩 #开启压缩compression:request:enabled: true # 开启请求压缩#最小触发压缩的大小min-request-size: ...

最新文章

  1. 超级细分插件_草图大师必装插件
  2. ASP.NET2.0轻松搞定统计图表【月儿原创】
  3. html字体渐变颜色的设置颜色代码,使用CSS3实现字体颜色渐变的实现
  4. 2014-06-25nbsp;20:39
  5. Python-类与文件读取结合
  6. 从崩溃的选课系统,论为什么更安全的 HTTPS 协议没有被全面采用
  7. RTT时钟管理篇——软硬定时器理解(一)
  8. zabbix前端php界面,Zabbix前端插件zatree在Zabbix 2.2.1前端报错的解决方案
  9. 2.1秒破百,马斯克宣称最安全、最快、最酷、最好的车,106个W,你会买单吗?
  10. java beetl 视频_04.Beetl常用内置函数以及安全输出---《Beetl视频课程》
  11. Matlab求解椭球上运动的点B,满足到定点A、C的距离之和最短
  12. 软件工程(3)微信抢票实验个人总结
  13. 使用pano2vr创建全景图
  14. 补充设定 timer1 定时器和 timer2 定时器定时做多件事
  15. 京东区块链之供应链应用篇:溯源应用结合区块链能碰撞出什么火花?
  16. Mysql中如何根据.frm和.idb文件恢复表结构
  17. Linux云计算之web 平台搭建(LAMP-CtenOS 6)
  18. ASP.NET 2.0数据教程之三十六 在DataList里编辑和删除数据
  19. Revit二开 批量链接模型
  20. 采集网www.caiji.hk 威客任务采集

热门文章

  1. [Conclusion]RabbitMQ-客户端源码之总结
  2. 设计模式:解释器模式(Interpreter)
  3. 跟着邓神 3 天掌握 Go 语言基础(免费)
  4. 优化传输文件的性能- -零拷贝
  5. 灵光一现的创造——霍夫曼编码
  6. 实时远程医学影像服务质量保障与网络优化
  7. 【大会】看案例,选方案
  8. 神经网络可视化,真的很像神经元!
  9. Linux系统调用--getrusage函数详解
  10. linux编译cmake