zoukankan      html  css  js  c++  java
  • 修改Feign数据解析,由jackson改为fastjson,同时解决fastjson中Content-Type问题

    https://my.oschina.net/u/3419586/blog/2964047

    背景:
    在用Feign Client 接口调用,由于jackson对null等特殊值处理存在异常,故改用fastjson解析数据


    操作步骤:
    1.增加文件FeignConfig,注入Bean,修改默认Feign默认的解析方式
    2.由于fastjson1.2.28后,增加了对Content-type验证,故添加多种MediaType

    @Configuration
    public class FeignConfig {
    
        @Bean
        public ResponseEntityDecoder feignDecoder() {
            HttpMessageConverter fastJsonConverter = createFastJsonConverter();
            ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(fastJsonConverter);
            return new ResponseEntityDecoder(new SpringDecoder(objectFactory));
        }
    
        @Bean
        public SpringEncoder feignEncoder(){
            HttpMessageConverter fastJsonConverter = createFastJsonConverter();
            ObjectFactory<HttpMessageConverters> objectFactory = () -> new HttpMessageConverters(fastJsonConverter);
            return new SpringEncoder(objectFactory);
        }
    
        private HttpMessageConverter createFastJsonConverter() {
    
            //创建fastJson消息转换器
            FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
    
            //升级最新版本需加=============================================================
            List<MediaType> supportedMediaTypes = new ArrayList<>();
            supportedMediaTypes.add(MediaType.APPLICATION_JSON);
            supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
            supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
            supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
            supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
            supportedMediaTypes.add(MediaType.APPLICATION_PDF);
            supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
            supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
            supportedMediaTypes.add(MediaType.APPLICATION_XML);
            supportedMediaTypes.add(MediaType.IMAGE_GIF);
            supportedMediaTypes.add(MediaType.IMAGE_JPEG);
            supportedMediaTypes.add(MediaType.IMAGE_PNG);
            supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
            supportedMediaTypes.add(MediaType.TEXT_HTML);
            supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
            supportedMediaTypes.add(MediaType.TEXT_PLAIN);
            supportedMediaTypes.add(MediaType.TEXT_XML);
            fastConverter.setSupportedMediaTypes(supportedMediaTypes);
    
            //创建配置类
            FastJsonConfig fastJsonConfig = new FastJsonConfig();
            //修改配置返回内容的过滤
            //WriteNullListAsEmpty  :List字段如果为null,输出为[],而非null
            //WriteNullStringAsEmpty : 字符类型字段如果为null,输出为"",而非null
            //DisableCircularReferenceDetect :消除对同一对象循环引用的问题,默认为false(如果不配置有可能会进入死循环)
            //WriteNullBooleanAsFalse:Boolean字段如果为null,输出为false,而非null
            //WriteMapNullValue:是否输出值为null的字段,默认为false
            fastJsonConfig.setSerializerFeatures(
                    SerializerFeature.DisableCircularReferenceDetect,
                    SerializerFeature.WriteMapNullValue
            );
            fastConverter.setFastJsonConfig(fastJsonConfig);
    
            return fastConverter;
        }
    }

    实际调用链:
    1.通过Feign调用接口
    2.默认进入
    org.springframework.http.converter.AbstractHttpMessageConverter 的 writeInternal 方法
    3.FastJson实现该方法,进行数据转换处理
    com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter 中的 write 方法
    验证结束


    https://blog.csdn.net/lppl010_/article/details/94215233

  • 相关阅读:
    WinForm绘制带有升序、降序的柱形图
    WinForm绘制柱形图
    WinForm绘制文本--字体加粗、倾斜、下划线
    WinForm绘制直线、曲线、矩形、椭圆、圆弧
    DataGridView动态添加下拉列表DataGridViewComboBoxColumn并为下拉列表设置默认值
    winform DataGridView设置选中单元格整行变色和隔行变色
    winform DataGridView设置行高 列宽 设置内容格式 验证输入单元格的内容是否正确
    winform定义static变量窗体传值
    C#中英文逗号之间的相互转化
    c#: WebBrowser 禁止在新窗口打开链接
  • 原文地址:https://www.cnblogs.com/softidea/p/11763859.html
Copyright © 2011-2022 走看看