SpringBoot配置Jackson序列化

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

import java.io.IOException;
import java.text.SimpleDateFormat;

/**
 * Jackson相关配置
 *
 * @author : Dewey
 * @date : 2020/11/12 9:22
 */
@Configuration
public class JacksonConfig {
    
    
  @Bean
  @Primary
  @ConditionalOnMissingBean(ObjectMapper.class)
  public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
    
    
    ObjectMapper objectMapper = builder.createXmlMapper(false).build();
    // 通过该方法对mapper对象进行设置,所有序列化的对象都将按改规则进行系列化
    // Include.Include.ALWAYS 默认
    // Include.NON_DEFAULT 属性为默认值不序列化
    // Include.NON_EMPTY 属性为 空("") 或者为 NULL 都不序列化
    // Include.NON_NULL 属性为NULL 不序列化
    // objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
    // objectMapper.setSerializationInclusion(JsonInclude.Include.NON_DEFAULT);
    // 配置序列化时的日期格式(yyyy-MM-dd)
    // objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    // 允许出现特殊字符和转义符
    // objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);
    // 允许出现单引号
    // objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
    // 字段保留,序列化时将null值转为""
    objectMapper
        .getSerializerProvider()
        .setNullValueSerializer(
            new JsonSerializer<Object>() {
    
    
              @Override
              public void serialize(
                  Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider)
                  throws IOException {
    
    
                jsonGenerator.writeString("");
              }
            });
    // 反序列化时遇到未知属性不抛出JsonMappingException
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    // 反序列化时忽略json中存在但Java对象不存在的属性
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    // 反序列化时的时间格式
    objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
    return objectMapper;
  }
}

猜你喜欢

转载自blog.csdn.net/DeweyLau/article/details/109637329