SpringMVC 之 JSON系列化方式配置

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

自定义配置类 实现 WebMvcConfigurer 类 ,重写 extendMessageConverters  或者 configureMessageConverters 方法,将自定义系列化的方法配置如方法中,可自行编写系列化方式,如  FastJSON  /  Gson 方式进行,当然,Spring默认使用的是 Jackson ,开发中不建议更换,更换单纯的只是测试一下使用

二者二选一

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

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> 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<HttpMessageConverter<?>> 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 的位置

 

posted @ 2022-03-20 00:56  Vermeer  阅读(683)  评论(0)    收藏  举报