
二人セゾン
前言
遇到對象有很多屬性,通過json序列化全部返給客戶端。
但是一部分?jǐn)?shù)據(jù)為null,同時客戶端也不需要null數(shù)據(jù)。就想著怎么把為null的不參加序列化.
注解在實(shí)體類
@JsonInclude(Include.NON_NULL)
- 將該標(biāo)記放在屬性上,如果該屬性為NULL則不參與序列化
- 如果放在類上邊,那對這個類的全部屬性起作用
- Include.Include.ALWAYS 默認(rèn)
- Include.NON_DEFAULT 屬性為默認(rèn)值不序列化
- Include.NON_EMPTY 屬性為 空(“”) 或者為 NULL 都不序列化
- 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);
- 通過該方法對mapper對象進(jìn)行設(shè)置,所有序列化的對象都將按改規(guī)則進(jìn)行系列化
- Include.Include.ALWAYS 默認(rèn)
- Include.NON_DEFAULT 屬性為默認(rèn)值不序列化
- Include.NON_EMPTY 屬性為 空(“”) 或者為 NULL 都不序列化
- 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ù)需求。