jackson實體轉json時 為NULL不參加序列化的匯總,jacksonjson
首先加入依賴
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
方法一、實體上使用 @JsonInclude(JsonInclude.Include.NON_NULL)
1、如果放在屬性上,如果該屬性為NULL則不參與序列化 ;
2、如果放在類上,那對這個類的全部屬性起作用 ;
參數意義:
JsonInclude.Include.ALWAYS 預設
JsonInclude.Include.NON_DEFAULT 屬性為預設值不序列化
JsonInclude.Include.NON_EMPTY 屬性為 空(””) 或者為 NULL 都不序列化
JsonInclude.Include.NON_NULL 屬性為NULL 不序列化
使用之前
使用之後
方法二、 如果不想每次都這樣添加,可以在application.yml配置全域定義, 這種預設都生效
spring: jackson: default-property-inclusion: non_null
方法三、通過ObjectMapper 對象進行設定,下面是測試案例
@Testpublic void test() throws JsonProcessingException { ResultVo resultVo = new ResultVo(); resultVo.setCode(0); resultVo.setMsg("成功"); ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);//預設 String json = mapper.writeValueAsString(resultVo); System.out.println(json); mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); //屬性為NULL不序列化 json = mapper.writeValueAsString(resultVo); System.out.println(json); Map map = new HashMap(); map.put("code",0); map.put("msg","成功"); map.put("data",null); json = mapper.writeValueAsString(map); System.out.println(json);}
列印如下:
{"code":0,"msg":"成功","data":null} {"code":0,"msg":"成功"} {"msg":"成功","code":0,"data":null}
注意:ObjectMapper 只對VO起作用;對Map List不起作用
1、如果必定返回的欄位,可以在實體類一開始就給預設值(如字串 ”” ; list [] ),來避免null
2、jackson實體轉json時,某個屬性不參加序列化時 使用@JsonIgnore 放在該屬性上