SpringBoot自定义消息转换器HttpMessageConverter

异常报错

Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_ARRAY token
 at [Source: (PushbackInputStream); line: 1, column: 25] (through reference chain: com.pinyougou.pojo.TbTypeTemplate["customAttributeItems"])]

问题分析

需要配置使用FastJson插件返回json数据
在springboot项目里当我们在控制器类上加上@RestController注解或者其内的方法上加入@ResponseBody注解后,默认会使用jackson插件来返回json数据,下面我们利用fastjson为我们提供的FastJsonHttpMessageConverter来返回json数据。

  1. springboot1.X 版本中可以生效
/**
 * @author LoganXie
 * @description
 * @create_date 2020/4/11
 */
@Configuration
public class FastJsonMessageConverterConfig implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(
                SerializerFeature.DisableCircularReferenceDetect,   // 防止循环引用
                SerializerFeature.WriteNullListAsEmpty, // 空集合返回[],不返回null
                SerializerFeature.WriteNullStringAsEmpty,   // 空字符串返回"",不返回null
                SerializerFeature.WriteNullBooleanAsFalse,   //Boolean字段如果为null,输出为false,而非null
                SerializerFeature.WriteMapNullValue //是否输出值为null的字段,默认为false
        );
        fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);

        //处理中文乱码问题
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);

        converters.add(fastJsonHttpMessageConverter);
    }
}

  1. springboot2.X 版本配置
@Bean
   public HttpMessageConverters fastJsonHttpMessageConverters() {
       FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
       FastJsonConfig fastJsonConfig = new FastJsonConfig();
       fastJsonConfig.setSerializerFeatures(
               SerializerFeature.DisableCircularReferenceDetect,   // 防止循环引用
               SerializerFeature.WriteNullListAsEmpty, // 空集合返回[],不返回null
               SerializerFeature.WriteNullStringAsEmpty,   // 空字符串返回"",不返回null
//                SerializerFeature.WriteNullNumberAsZero,   // 数值字段如果为null,输出为0,而非null
//                SerializerFeature.PrettyFormat,   // 格式化输出
//                SerializerFeature.BeanToArray,   // 将对象转为array输出
//                SerializerFeature.QuoteFieldNames,   // 输出key时是否使用双引号,默认为true
//                SerializerFeature.UseSingleQuotes,   // 输出key时使用单引号而不是双引号,默认为false(经测试,这里的key是指所有的输出结果,而非key/value的key,而是key,和value都使用单引号或双引号输出)
//                SerializerFeature.WriteNullBooleanAsFalse,   //Boolean字段如果为null,输出为false,而非null
               SerializerFeature.WriteDateUseDateFormat,   //全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
               SerializerFeature.WriteMapNullValue //是否输出值为null的字段,默认为false
       );
       fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);

       //处理中文乱码问题
       List<MediaType> fastMediaTypes = new ArrayList<>();
       fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
       fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
       return new HttpMessageConverters(fastJsonHttpMessageConverter);
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值