SpringBoot学习与总结

SpringBoot 自定义WebMvcConfig有关Jack

2017-06-23  本文已影响189人  花绽放水流年

问题描述

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

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
@JsonComponent
public class CustomRowIDSerializer extends JsonSerializer<RowId> {

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

解决方案

    @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());
        });
    }
上一篇 下一篇

猜你喜欢

热点阅读