美文网首页SpringBoot学习与总结
SpringBoot 自定义WebMvcConfig有关Jack

SpringBoot 自定义WebMvcConfig有关Jack

作者: 花绽放水流年 | 来源:发表于2017-06-23 14:07 被阅读189次

问题描述

SpringBoot Web项目中如果自定义了WebMvcConfig extends WebMvcConfigurationSupport
遇到如下问题:

  • Jackson框架日期输出无法按照配置的格式进行格式化,而是转化为long型的值。
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
  • 如果有自定义Serializer的实现,也出现了无法被调用的情况。
@JsonComponent
public class CustomRowIDSerializer extends JsonSerializer<RowId> {

    @Override
    public void serialize(RowId rowid, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeString(rowid.toString());
    }
}

解决方案

  • 以上问题暂时不知道什么原因引起的。但是发现如果去掉WebMvcConfig ,问题就消失了。

  • 总结问题现象:一旦存在WebMvcConfig ,那么SpringBoot默认有关Jackson的配置都失效了。

  • 目前解决的办法如下:
    在WebMvcConfig 中添加如下代码

    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.stream().filter(c -> c instanceof MappingJackson2HttpMessageConverter).forEach(cvt -> {
            MappingJackson2HttpMessageConverter converter = (MappingJackson2HttpMessageConverter) cvt;
            ObjectMapper objectMapper = converter.getObjectMapper();
            //添加rowid序列化器
            SimpleModule simpleModule = new SimpleModule();
            simpleModule.addSerializer(RowId.class, customRowIDSerializer);
            objectMapper.registerModule(simpleModule);
            /*objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
                @Override
                public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
                    //如果需要将null值输出为“”,取消这里的注释。
                    jsonGenerator.writeString("");
                }
            });*/
            String dateFormat = ServerUtil.nvl(environment.getProperty("spring.jackson.date-format"), "yyyy-MM-dd HH:mm:ss");
            objectMapper.setDateFormat(new SimpleDateFormat(dateFormat));
            objectMapper.setTimeZone(TimeZone.getDefault());
        });
    }

相关文章

网友评论

  • JimmyGan:遇到同样的问题,纠结了很久

本文标题:SpringBoot 自定义WebMvcConfig有关Jack

本文链接:https://www.haomeiwen.com/subject/emdccxtx.html