Java物件為空時,不顯示該物件屬性,或者將null轉換為""

小碼蟻啊發表於2019-03-29

第一種方法: 

@JsonInclude(JsonInclude.Include.NON_NULL)

將這個註解加在實體類對應的物件名上面,或者類名上面。

Include.ALWAYS 屬性都序列化
Include.NON_DEFAULT 屬性為預設值不序列化 
Include.NON_EMPTY 屬性為 空("") 或者為 NULL 都不序列化 
Include.NON_NULL 屬性為NULL 不序列化 

如:

private Integer id;
 
@JsonInclude(JsonInclude.Include.NON_NULL)
private String resourceName;

這時候如果resourceName為null 則不會顯示該屬性。

這個方法缺點就是就是如果為空整個屬性就沒了,下面介紹一種講null轉""的方法。

第二種方法:自定義一個objectmapper

import java.io.IOException;
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 com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializerProvider;
/**
 * null返回空字串
 */
@Configuration
public class JacksonConfig {
    @Bean
    @Primary
    @ConditionalOnMissingBean(ObjectMapper.class)
    public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
        ObjectMapper objectMapper = builder.createXmlMapper(false).build();
        SerializerProvider serializerProvider = objectMapper.getSerializerProvider();
        serializerProvider.setNullValueSerializer(new JsonSerializer<Object>() {
            @Override
            public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
                jsonGenerator.writeString("");
            }
        });
        return objectMapper;
    }
}

注意但是這個方法會把物件為空,list ,map  ,列舉 為 null的情況下也轉成 空字串,這是個弊端,根據需求而用吧。

第三種方法:直接設定屬性預設值

就是在初始化實體類的時候設定屬性預設值

如:

private String name="";

 

相關文章