feign 序列化_Spring Cloud Feign 配置 FastJson
如今,越来越多的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相关推荐
- 自定义报错返回_Spring Cloud Feign的使用和自定义配置
在上一篇文章 null:Spring Cloud 自定义Eureka Ribbon负载均衡策略zhuanlan.zhihu.com 中,我们使用Ribbon自定义的策略实现了负载均衡,接下来我们介绍 ...
- feign 序列化_Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题...
LocalDate.LocalTime.LocalDateTime是Java 8开始提供的时间日期API,主要用来优化Java 8以前对于时间日期的处理操作.然而,我们在使用Spring Boot或使 ...
- @scheduled注解配置时间_Spring Cloud 之配置服务器(下)配置刷新
学习目标 本文所讲内容为上一文的后续,我们在上一文中学习了什么是 Spring Cloud 的配置服务器:如何使用两种方式搭建 Spring Cloud Config Server 以及客户端如何连接 ...
- java如何实现配置文件动态刷新_Spring Cloud 动态刷新配置信息教程详解
有时候在配置中心有些参数是需要修改的,这时候如何不重启而达到实时生效的效果呢? 添加依赖 ... org.springframework.boot spring-boot-starter-actuat ...
- feign 序列化_Spring Feign 序列化机制
Spring Cloud封装Feign,直接使用Spring MVC注解以及HttpMessageConverters来序列化. Spring Boot有autoconfigure机制,当spring ...
- feign 序列化_自定义 feign 反序列化时间字符格式
feign client 默认配置类:默认的配置类为FeignClientsConfiguration 配置了解码和编码. 当请求Feign Client的方法执行时会被 SynchronousMet ...
- feign获取outstream_Spring Cloud Feign接口返回流
身无彩凤双飞翼,心有灵犀一点通. 服务提供者 @GetMapping("/{id}") public void queryJobInfoLogDetail(@PathVariabl ...
- Spring Cloud Feign原理详解
目录 1.什么是Feign? 2.Open Feign vs Spring Cloud Feign 2.1.OpenFeign 2.2.Spring Cloud Open Feign 3.Spring ...
- Spring Cloud Feign 请求压缩 、Feign的日志级别配置
一.Spring Cloud Feign 请求压缩 #开启压缩compression:request:enabled: true # 开启请求压缩#最小触发压缩的大小min-request-size: ...
最新文章
- 超级细分插件_草图大师必装插件
- ASP.NET2.0轻松搞定统计图表【月儿原创】
- html字体渐变颜色的设置颜色代码,使用CSS3实现字体颜色渐变的实现
- 2014-06-25nbsp;20:39
- Python-类与文件读取结合
- 从崩溃的选课系统,论为什么更安全的 HTTPS 协议没有被全面采用
- RTT时钟管理篇——软硬定时器理解(一)
- zabbix前端php界面,Zabbix前端插件zatree在Zabbix 2.2.1前端报错的解决方案
- 2.1秒破百,马斯克宣称最安全、最快、最酷、最好的车,106个W,你会买单吗?
- java beetl 视频_04.Beetl常用内置函数以及安全输出---《Beetl视频课程》
- Matlab求解椭球上运动的点B,满足到定点A、C的距离之和最短
- 软件工程(3)微信抢票实验个人总结
- 使用pano2vr创建全景图
- 补充设定 timer1 定时器和 timer2 定时器定时做多件事
- 京东区块链之供应链应用篇:溯源应用结合区块链能碰撞出什么火花?
- Mysql中如何根据.frm和.idb文件恢复表结构
- Linux云计算之web 平台搭建(LAMP-CtenOS 6)
- ASP.NET 2.0数据教程之三十六 在DataList里编辑和删除数据
- Revit二开 批量链接模型
- 采集网www.caiji.hk 威客任务采集