SpringBoot追加自定義的MessgeConverter

自定義messageConverter

@Configuration
public class WebConfiguration implements WebMvcConfigurer {

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        //時間格式統一,特別的可用JsonFormat註解
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        converter.setObjectMapper(objectMapper);
        //自定義null序列化
        //MappingJackson2HttpMessageConverter 默認對null對象 返回的null,不屬於任何類型的。並且沒有對null對象做區分管理(例如
        // 空數組返回[] ,空map返回{} ,如果需要這中的,可以自定義NullValueSerializer)
        objectMapper.getSerializerProvider().setNullValueSerializer(new NullJsonSerializer());
//        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);//爲null的字段自動屏蔽下,不返回
        //優先級高於springboot auto config 的
        converters.add(0, converter);
    }
}
public class NullJsonSerializer extends JsonSerializer<Object> {
    @Override
    public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        //空值直接返回空串
        jsonGenerator.writeString(StringUtils.EMPTY);
    }
}

注意事項

  • 建議是用implement WebMvcConfigurer 的方式,不要使用 extend WebMvcConfigurationSupport + @EnableWebMvc ,因爲@EnableWebMvc 是全權負責Springboot的自動配置,搞不好,啓動項目後一頓錯
  • MessageConverter 記得要排在spring boot 的converter 的同類型的前面,否則放在最後,無法生效
  • 如果某特殊的Date的格式化不按照 yyyy-MM-dd HH:mm:ss 的方式,可以在字段上,或者 get方法上,追加@JsonFormat ,注意是com.fasterxml.jackson.annotation 裏的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章