json序列化時忽略值為null的字段2種方式實(shí)例
當(dāng)一個對象里有些屬性值為null 的不想?yún)⑴cjson序列化時,比如打印日志等場景進(jìn)行序列化,null字段會占用日志長度。 可以采用如下兩種方式:
方法一:JsonInclude.Include.NON_NULL 注解
在類上面增加 @JsonInclude(JsonInclude.Include.NON_NULL)
示例:
//這個是類注解,表示該類實(shí)例化的對象里,值為null的字段不參與序列化
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class Person {
private Long id;
private String name;
}
public static void main(String[] args) {
Person p1 = new Person();
p1.setId(1L);
p1.setName("test1");
System.out.println("p1: " +JSONObject.toJSON(p1));
Person p2 = new Person();
p2.setId(1L);
System.out.println("p2: " +JSONObject.toJSON(p2));
}輸出:
p1: {"name":"test1","id":1}
p2: {"id":1}
方法2:自定義一個ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
自定義一個JsonUtils工具類:
可以解析字符串,array, map等
@Slf4j
public class JsonUtils {
private static final String EMPTY_JSON = "{}";
private static final String EMPTY_ARRAY_JSON = "[]";
private static final ObjectMapper MAPPER = new ObjectMapper();
static {
MAPPER.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);
}
public static String toJSON(@Nullable Object obj) {
if (obj == null) {
return null;
}
try {
return MAPPER.writeValueAsString(obj);
} catch (JsonProcessingException e) {
log.error("toJson error, ", e);
throw new BusinessException(e.getMessage());
}
}
public static <T> T parseObject(@Nullable String json, Class<T> valueType) {
if (json == null) {
return null;
}
try {
return MAPPER.readValue(json, valueType);
} catch (IOException e) {
log.error("parse object error, ", e);
throw new BusinessException(e.getMessage());
}
}
public static <E, T extends Collection<E>> T parseArray(String json,
Class<? extends Collection> collectionType, Class<E> valueType) {
if (StringUtils.isEmpty(json)) {
json = EMPTY_ARRAY_JSON;
}
try {
return MAPPER.readValue(json,
defaultInstance().constructCollectionType(collectionType, valueType));
} catch (IOException e) {
log.error("parseArray error, ", e);
throw new BusinessException(e.getMessage());
}
}
public static <T> List<T> parseArray(String json, Class<T> valueType) {
return parseArray(json, List.class, valueType);
}
/**
*
*/
public static <K, V, T extends Map<K, V>> T parseMap(String json, Class<? extends Map> mapType,
Class<K> keyType, Class<V> valueType) {
if (StringUtils.isEmpty(json)) {
json = EMPTY_JSON;
}
try {
return MAPPER.readValue(json,
defaultInstance().constructMapType(mapType, keyType, valueType));
} catch (IOException e) {
log.error("parseMap error, ", e);
throw new BusinessException(e.getMessage());
}
}
public static Map<String, Object> parseMap(String string) {
return parseMap(string, Map.class, String.class, Object.class);
}
}測試
public static void main(String[] args) {
Person p1 = new Person();
p1.setId(1L);
p1.setName("test1");
System.out.println("p1: " +JsonUtils.toJSON(p1));
Person p2 = new Person();
p2.setId(1L);
System.out.println("p2: " +JsonUtils.toJSON(p2));
}
//輸出:
// p1: {"id":1,"name":"test1"}
// p2: {"id":1}總結(jié)
到此這篇關(guān)于json序列化時忽略值為null的字段的文章就介紹到這了,更多相關(guān)json序列化忽略值為null字段內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Error occurred during initialization o
這篇文章主要介紹了解決Error occurred during initialization of VM Java虛擬機(jī)初始化失敗問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03
Java 模擬數(shù)據(jù)庫連接池的實(shí)現(xiàn)代碼
這篇文章主要介紹了Java 模擬數(shù)據(jù)庫連接池的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
SpringBoot中多環(huán)境yml的配置與打包問題
這篇文章主要介紹了SpringBoot中多環(huán)境yml的配置與打包問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09
SpringBoot+Druid開啟監(jiān)控頁面的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot+Druid開啟監(jiān)控頁面的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06
Java HtmlEmail 郵件發(fā)送的簡單實(shí)現(xiàn)代碼
下面小編就為大家?guī)硪黄狫ava HtmlEmail 郵件發(fā)送的簡單實(shí)現(xiàn)代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06
Java實(shí)現(xiàn)在Word文檔中添加批注的示例代碼
在現(xiàn)代辦公環(huán)境中,Word文檔已成為信息傳遞和協(xié)作的重要載體,本教程將深入探討如何利用Java實(shí)現(xiàn)Word文檔批注的自動化添加,感興趣的小伙伴可以了解下2025-10-10
SpringBoot實(shí)現(xiàn)數(shù)據(jù)源動態(tài)切換的最佳姿勢
這篇文章主要為大家詳細(xì)介紹一下SpringBoot實(shí)現(xiàn)數(shù)據(jù)源動態(tài)切換的最佳姿勢,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-03-03
Spring Boot 與 Tomcat 錯誤頁面處理機(jī)制全面解析
本文給大家介紹Spring Boot 如何與內(nèi)嵌 Tomcat 協(xié)作,實(shí)現(xiàn)高效、靈活的錯誤頁面處理機(jī)制,通過分析核心源碼,我們將揭示這一機(jī)制背后的設(shè)計(jì)哲學(xué)和實(shí)現(xiàn)細(xì)節(jié),感興趣的朋友跟隨小編一起看看吧2024-12-12

