SpringMVC 之 JSON系列化方式配置


SpringBoot (SpringMvc) 中,@ResponseBody @RestController 将返回值进行 JSON 系列化 ,可支持自定义系列换方式,

自定义配置类 实现 WebMvcConfigurer 类 ,重写 extendMessageConverters  或者 configureMessageConverters 方法,将自定义系列化的方法配置如方法中,可自行编写系列化方式,推荐使用 FastJSON  /  Gson 方式进行

二者二选一

1、SpringMVC 核心配置文件中配置转换器  configureMessageConverters()

@Override
public void configureMessageConverters(List> converters) {
    FastJsonHttpMessageConverter fjConverter = new FastJsonHttpMessageConverter();
    FastJsonConfig fjConfig = new FastJsonConfig();
    fjConfig.setDateFormat("yyyy-MM-dd");
    fjConfig.setCharset(Charset.forName("UTF-8"));
    fjConfig.setSerializerFeatures(
            SerializerFeature.PrettyFormat,
            SerializerFeature.WriteNullListAsEmpty
    );
    fjConverter.setFastJsonConfig(fjConfig);
    // converters.add(fjConverter); 无效
    converters.add(1, fjConverter);
}

2、SpringMVC 核心配置文件中配置转换器  extendMessageConverters()

@Override
public void extendMessageConverters(List> converters) {
    FastJsonHttpMessageConverter fjConverter = new FastJsonHttpMessageConverter();
    FastJsonConfig fjConfig = new FastJsonConfig();
    fjConfig.setDateFormat("yyyy-MM-dd");
    fjConfig.setCharset(Charset.forName("UTF-8"));
    fjConfig.setSerializerFeatures(
            SerializerFeature.PrettyFormat,
            SerializerFeature.WriteNullListAsEmpty
    );
    fjConverter.setFastJsonConfig(fjConfig);
    // converters.add(fjConverter); 无效
    converters.add(1, fjConverter);
}

注意:配置后不生效的问题 参看:https://segmentfault.com/a/1190000015975405

SpringBoot  默认使用的是 MappingJackson2HttpMessageConverter 进行系列化专业换,转换器 集合从索引 0 开始 获取相应的 转换器,将自定义的转换器配置到 MappingJackson2HttpMessageConverter 之前即可生效,入下示例 配置到 索引 为 1 的位置