@Configuration
@EnableWebMvc
public class JsonObjectMapper implements WebMvcConfigurer {
/** * 专门处理http json null 转 "" 字符串的问题 * * @param converters */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder(); initGlobalJackson2ObjectMapperBuilder(builder); ObjectMapper objectMapper = builder.createXmlMapper(false).build(); objectMapper.setSerializerFactory(objectMapper.getSerializerFactory().withSerializerModifier(new MyNullBeanSerializerModifier())); MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter(); jackson2HttpMessageConverter.setObjectMapper(objectMapper); converters.add(jackson2HttpMessageConverter); } static public void initGlobalJackson2ObjectMapperBuilder(Jackson2ObjectMapperBuilder builder) { //全局共有的序列化反序列化用builder参数设置即可 } @Bean("jackson2ObjectMapperBuilderCustomizer") public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { Jackson2ObjectMapperBuilderCustomizer customizer = new Jackson2ObjectMapperBuilderCustomizer() { @Override public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) { initGlobalJackson2ObjectMapperBuilder(jacksonObjectMapperBuilder); } }; return customizer; } static public class MyNullStringJsonSerializer extends JsonSerializer { @Override public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { if (o == null) { jsonGenerator.writeString("--"); } } } static public class MyNullBeanSerializerModifier extends BeanSerializerModifier { // 字符串等类型 private JsonSerializer _nullJsonSerializer = new MyNullStringJsonSerializer(); @Override public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, List beanProperties) { //循环所有的beanPropertyWriter for (int i = 0; i < beanProperties.size(); i++) { BeanPropertyWriter writer = (BeanPropertyWriter) beanProperties.get(i); //判断字段的类型,如果是array,list,set则注册nullSerializer if (writer.getPropertyType().equals(String.class)) { writer.assignNullSerializer(this._nullJsonSerializer); } } return beanProperties; } }
}