Spring Cloud Feign Jackson自定义配置
来源:互联网 发布:matlab中文版 mac 编辑:程序博客网 时间:2024/05/16 19:20
Spring Cloud Feign 默认支持Spring MVC的注解 使用相同的HttpMessageConverters类转换
官方文档说明:
Spring Cloud adds support for Spring MVC annotations and for using the same HttpMessageConverters used by default in Spring Web.但是我们一般在返回给前端JSON格式的时候 都会把相应的 NULL值转为相应的"",这使得Spring Cloud Feign也使用相同的Jackson配置,例如我们项目的配置
@Beanpublic ObjectMapper jacksonObjectMapper() {ObjectMapper objectMapper = new ObjectMapper();// objectMapper.setSerializationInclusion(Include.NON_NULL);objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {@Overridepublic void serialize(Object value, JsonGenerator jg, SerializerProvider sp)throws IOException, JsonProcessingException {jg.writeString("");sp.getDefaultNullKeySerializer();}});objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);return objectMapper;}出现的问题:
在服务通过Feign进行请求的时候,传NULL值引用类型值时,会出现类型转换异常,由于HttpMessageConverters直接把NULL转为了""。
解决思路:
自定义配置 Spring Cloud Feign Encoder与Decoder
官方文档说明:
Spring Cloud Netflix provides the following beans by default for feign (BeanType beanName: ClassName):Decoder feignDecoder: ResponseEntityDecoder (which wraps a SpringDecoder)Encoder feignEncoder: SpringEncoderLogger feignLogger: Slf4jLoggerContract feignContract: SpringMvcContractFeign.Builder feignBuilder: HystrixFeign.BuilderClient feignClient: if Ribbon is enabled it is a LoadBalancerFeignClient, otherwise the default feign client is used.解决方法:
统一配置Feign 的Encoder和Decoder的Jackson转换方式
@Configurationpublic class CustomFeignConfig { @Bean public Decoder feignDecoder() { HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter(customObjectMapper()); ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(jacksonConverter); return new ResponseEntityDecoder(new SpringDecoder(objectFactory)); } @Bean public Encoder feignEncoder(){ HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter(customObjectMapper()); ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(jacksonConverter); return new SpringEncoder(objectFactory); } public ObjectMapper customObjectMapper(){ ObjectMapper objectMapper = new ObjectMapper(); //Customize as much as you want objectMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true); return objectMapper; }}
阅读全文
0 0
- Spring Cloud Feign Jackson自定义配置
- Spring Cloud 的 Feign 组件 自定义配置
- Spring Cloud中Feign配置详解
- Spring Cloud feign
- Spring Cloud Feign诠释
- spring cloud-feign
- Spring Cloud Feign常见问题
- spring cloud Feign
- spring cloud feign
- Spring Cloud feign使用
- Spring Cloud Feign
- Spring Cloud Feign
- spring-cloud【Feign】
- spring cloud day03 【feign】
- 疯狂Spring Cloud连载(12)自定义Feign客户端
- Spring Cloud之Feign入门
- Spring Cloud Feign实例讲解
- Spring Cloud Feign 使用方式
- URLDecoder解码:如果已经为utf-8,再解码也会保持原样
- C
- 用代码说话: 比较ruby和scala的集合操作each map filter reduce
- 【无用】晟桀 --给你喜欢却不能在一起的人说一句话,你会说什么?
- 学习别人的经验进行自己的交互进阶(下)
- Spring Cloud Feign Jackson自定义配置
- 转换一个String字符串为byte数组
- ajax跨域问题分析及解决办法
- 《快学scala》笔记一
- 安卓下流和字符串的转换
- 2017ACM-ICPC亚洲区域赛(西安站)
- ubuntu16.04源码安装PyTorch
- Java
- Python解释器