jackson實體轉json時 為NULL不參加序列化的匯總


首先加入依賴
<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 對象進行設置,下面是測試用例

@Test
public  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 放在該屬性

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM