SSM Jackson 為NULL或者為空不參加序列化

二人セゾン

前言

遇到對象有很多屬性,通過json序列化全部返給客戶端。
但是一部分?jǐn)?shù)據(jù)為null,同時客戶端也不需要null數(shù)據(jù)。就想著怎么把為null的不參加序列化.


注解在實(shí)體類

@JsonInclude(Include.NON_NULL)

  1. 將該標(biāo)記放在屬性上,如果該屬性為NULL則不參與序列化
  2. 如果放在類上邊,那對這個類的全部屬性起作用
  3. Include.Include.ALWAYS 默認(rèn)
  4. Include.NON_DEFAULT 屬性為默認(rèn)值不序列化
  5. Include.NON_EMPTY 屬性為 空(“”) 或者為 NULL 都不序列化
  6. Include.NON_NULL 屬性為NULL 不序列化
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Dome{
    private Integer code;
    private String msg;
}

**@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) **

@JsonInclude(JsonInclude.Include.NON_NULL)
public class Dome{
 private Integer code;
 private String msg;
}

JSON原來經(jīng)過JACKSON轉(zhuǎn)換以后{"name":"name","sex":null}
加入注解后,結(jié)果為{"name":"name"},sex節(jié)點(diǎn)被去掉了。


代碼對象設(shè)置屬性

setSerializationInclusion(Include.NON_NULL)

ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);  

User user = new User(1,"",null); 
String outJson = mapper.writeValueAsString(user); 

System.out.println(outJson);


  1. 通過該方法對mapper對象進(jìn)行設(shè)置,所有序列化的對象都將按改規(guī)則進(jìn)行系列化
  2. Include.Include.ALWAYS 默認(rèn)
  3. Include.NON_DEFAULT 屬性為默認(rèn)值不序列化
  4. Include.NON_EMPTY 屬性為 空(“”) 或者為 NULL 都不序列化
  5. Include.NON_NULL 屬性為NULL 不序列化

注意:只對VO起作用,Map List不起作用

ObjectMapper mapper = new ObjectMapper(); 
mapper.setSerializationInclusion(Include.NON_NULL); 
  
Map map = new HashMap(); 
map.put("a", null); 
map.put("b", "b"); 
  
String ret_val = mapper.writeValueAsString(map); 
System.err.println(ret_val); 
Map m = mapper.readValue(ret_val, Map.class); 
System.err.println(m.get("a") + "|" + m.get("b")); 
輸出: 
{"b":"b","a":null} 
null|b 
VO vo = new VO(); 
vo.setA(null); 
vo.setB("b"); 
          
String ret_val1 = mapper.writeValueAsString(vo); 
System.err.println(ret_val1); 
VO v = mapper.readValue(ret_val1, VO.class); 
System.err.println(v.getA() + "|" + v.getB());<BR> 
輸出 
{"b":"b"} 
|b 


總結(jié)

還有其他的方式,但是感覺在實(shí)體類直接注解輕松。具體情況看業(yè)務(wù)需求。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,551評論 19 139
  • JAVA序列化機(jī)制的深入研究 對象序列化的最主要的用處就是在傳遞,和保存對象(object)的時候,保證對象的完整...
    時待吾閱讀 11,182評論 0 24
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,670評論 18 399
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,271評論 6 342
  • 我現(xiàn)在還記得,我第一次見到徐婉,是在一個悲涼雨夜中骯臟的小旅館。 她身邊的男人對我們破口大罵,很不配合,甚至揚(yáng)言要...
    吾定馳騁閱讀 2,172評論 5 6

友情鏈接更多精彩內(nèi)容