日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

feign 序列化_Spring Cloud Feign 配置 FastJson

發(fā)布時(shí)間:2024/2/28 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 feign 序列化_Spring Cloud Feign 配置 FastJson 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

如今,越來越多的Spring MVC項(xiàng)目都選擇使用FastJson做為Json解析框架,并且都會(huì)添加類似如下配置以支持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微服務(wù)項(xiàng)目中,要特別注意需要為Feign單獨(dú)配置FastJson,因?yàn)镕eign并不共用Spring MVC的消息轉(zhuǎn)換器鏈,而且它默認(rèn)使用的是Jackson Json解析庫。這會(huì)導(dǎo)致混亂,甚至出現(xiàn)序列化/反序列化錯(cuò)誤。

舉個(gè)例子:

Bean的屬性名與Json的屬性名不一樣,使用@JSONField()注解做轉(zhuǎn)換。

public class Bean {

@JSONField(name = "json_name")

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

但是,這個(gè)注解只有FastJson認(rèn)得,Jackson并不認(rèn)。所以在Feign將Bean轉(zhuǎn)成Json的時(shí)候,將把name作為key名稱輸出(而我期望的時(shí)候,輸出json_name的key名稱),導(dǎo)致在Feign的服務(wù)端,以Spring MVC方式接收的時(shí)候,FastJson由于找不到j(luò)son_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;

}

}

總結(jié)

以上是生活随笔為你收集整理的feign 序列化_Spring Cloud Feign 配置 FastJson的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。