SpringBoot | FastJsonHttpMessageConverter(自定义消息转换器)不生效

FastJsonHttpMessageConverter自定义消息转换器不生效

一、在项目中使用FastJsonHttpMessageConverter 不生效

不生效代码配置
配置类

二、排查问题&解决

配置后失效,一直很疑惑。打印一下转换器排查一下。
查看消息转换器集合
通过截图代码方式查看 确认自定义的FastJsonHttpMessageConverter 排序在最后,
根据消息转换器的应用规则,会顺序选择符合要求的消息转换器,
MappingJackson2HttpMessageConverter 在FastJsonHttpMessageConverter 之前,这样会使用MappingJackson2HttpMessageConverter 进行消息转换 ;
确认原因后 就将自定义消息转换器添加MappingJackson2HttpMessageConverter 前面就可以;

@Bean
    public HttpMessageConverters fastJsonHttpMessageConverters() {
        /**
         * 1.先定义一个convert转换消息的对象 
         * 2.添加fastjson的配置信息,比如:是否要格式化返回的json数据 
         * 3.在convert中添加配置信息 
         * 4.将convert添加到converters当中
         */
        // 1.先定义一个convert转换消息的对象
        FastJsonHttpMessageConverter fjc = new FastJsonHttpMessageConverter();
        List<MediaType> mediaTypes = new ArrayList<>(16);
        mediaTypes.add(MediaType.APPLICATION_ATOM_XML);
        mediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
        mediaTypes.add(MediaType.APPLICATION_JSON);
        mediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
        fjc.setSupportedMediaTypes(mediaTypes);
        FastJsonConfig fj = new FastJsonConfig();
        fj.setSerializerFeatures(
                SerializerFeature.QuoteFieldNames,
                SerializerFeature.WriteMapNullValue,
                SerializerFeature.WriteNullListAsEmpty,
                SerializerFeature.WriteNullNumberAsZero,
                SerializerFeature.WriteNullBooleanAsFalse,
                SerializerFeature.WriteNullStringAsEmpty,
                SerializerFeature.BrowserCompatible,
                SerializerFeature.BrowserCompatible,
                SerializerFeature.WriteSlashAsSpecial,
                SerializerFeature.WriteDateUseDateFormat,
                SerializerFeature.DisableCircularReferenceDetect
        );
        fjc.setFastJsonConfig(fj);
        return new HttpMessageConverters(fjc);
    }

这样就可以了

如果对你有帮助,加个关注把~
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 Spring Boot 中,我们可以通过实现 Converter 接口来自定义类型转换器,但是有时候我们发现自定义转换器并没有生效。这可能是因为 Spring Boot 默认使用的是 GenericConversionService,而不是我们自定义的 ConversionService。 解决这个问题的方法有两种: 1. 在自定义转换器上添加 @Component 注解,将其注册到 Spring 容器中,并在需要使用该转换器的地方使用 @Autowired 注入。这样就可以确保我们自定义转换器会被使用。 2. 自定义一个 ConversionService,将其注册到 Spring 容器中,并在需要使用该转换器的地方使用 @Qualifier 注解指定使用我们自定义转换器。这种方法需要手动配置 ConversionService,但是可以更灵活地控制转换器的使用。 下面是第二种方法的示例代码: ```java @Configuration public class ConversionConfig { @Bean public ConversionService conversionService() { DefaultConversionService conversionService = new DefaultConversionService(); // 注册自定义转换器 conversionService.addConverter(new MyConverter()); return conversionService; } } ``` 在需要使用自定义转换器的地方,可以使用 @Qualifier 注解指定使用我们自定义的 ConversionService,例如: ```java @RestController public class DemoController { @Autowired @Qualifier("conversionService") private ConversionService conversionService; @GetMapping("/test") public String test(@RequestParam("myParam") MyParam myParam) { // 使用自定义转换器将字符串转换为自定义类型 MyParam // ... return "success"; } } ``` 希望能帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一介草民丶

谢谢老板的一分钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值