欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 前端技术 > javascript >内容正文

javascript

feign 序列化_Spring Cloud Feign 配置 FastJson

发布时间:2024/2/28 javascript 41 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。