在springboot中添加jsonConverter

spring默認支持的是jackson2的json解析器.如今大部分人都習慣了fastJson的解析器.如今簡單的說下如何配置json解析器java

jackson2

配置以下:spring

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

 //JackSon 配置
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder();
        builder.serializationInclusion(JsonInclude.Include.NON_NULL);
        ObjectMapper objectMapper = builder.build();
        SimpleModule simpleModule = new SimpleModule();
        simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
        objectMapper.registerModule(simpleModule);
        objectMapper.configure(MapperFeature.PROPAGATE_TRANSIENT_MARKER, true);// 忽略 transient 修飾的屬性
        converters.add(new MappingJackson2HttpMessageConverter(objectMapper));
        super.configureMessageConverters(converters);
    }
}

能夠使用@JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd HH:mm:ss", locale = "zh", timezone = "GMT+8")來格式化Date數據的輸出. 默認日期是0時區的.早上8點會成爲早上0點 對於@Transient註解是支持的,不會輸出該註解修飾的字段json

fastjson

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

   @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        super.configureMessageConverters(converters);
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
      fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteNullStringAsEmpty,SerializerFeature.WriteNullNumberAsZero,
                SerializerFeature.WriteNullBooleanAsFalse,SerializerFeature.WriteNullListAsEmpty,
                SerializerFeature.WriteEnumUsingToString,SerializerFeature.PrettyFormat,
               //禁止循環引用,不然會出現   {"$ref":"$.data.giveAuthorList[0].goods"}
                SerializerFeature.DisableCircularReferenceDetect,
    //全局date 默認輸出格式爲"yyyy-MM-dd HH:mm:ss"  可經過修改com.alibaba.fastjson.Json.DEFFAULT_DATE_FORMAT設置
                SerializerFeature.WriteDateUseDateFormat
);

        fastConverter.setFastJsonConfig(fastJsonConfig);
        converters.add(fastConverter);
    }
}

該配置支持1.2.10之後的版本,若是有問題,請升級fastjson的版本. 能夠使用@JSONField來配置序列化的屬性app

@JSONField(format = "yyyy-MM-dd HH:mm:ss")ide

對於@Transient註解是不支持的,仍是會輸出該註解修飾的字段;ui

fastJsonConfig.setSerializerFeatures(SerializerFeature... serializerFeatures),這個方法配置序列化的特性.可傳入多個特性.以前只有一個SerializerFeature.PrettyFormat,因此字段值爲空就沒法輸出該字段. 2月5號發現後添加了一些處理空值的特性,和code

  • SerializerFeature.WriteEnumUsingToString 處理枚舉,輸出toString().
  • SerializerFeature.WriteDateUseDateFormat 處理date類型數據,開始全局默認轉化,默認輸出格式爲"yyyy-MM-dd HH:mm:ss" 可經過修改com.alibaba.fastjson.Json.DEFFAULT_DATE_FORMAT設置
相關文章
相關標籤/搜索