網頁

2019/8/29

Jackson @JsonInclude用法

在Spring Web專案的RestController回傳Java物件時,Spring會自動透過Jaskson把回傳的Java物件轉換成JSON。

如果希望Java物件的屬性在某些情況下不要被轉成JSON屬性,可以設定@JsonInclude來達成。


@JsonInclude最常應用的情形就是當Java物件的屬性值為null時不轉成JSON的屬性。

例如下面是一支@RestController

DemoController

@RestController
public class DemoController {
    
    @PostMapping("/test")
    public ResponseDto getEmployee() {
        
        ResponseDto responseDto = new ResponseDto();
        responseDto.setNum(20000);
        responseDto.setStr(null);
        responseDto.setStrList(null);
        
        return responseDto;
    }

}

傳出的Java物件為ResponseDto,尚未設定@JsonInclude

ResponseDto

public class ResponseDto {

    private Integer num;
    private String str;
    private List strList;

    // getter setter...
}

當呼叫/test時,回傳的結果如下,即使屬性值為null仍轉成JSON屬性。

{
    "num": 20000,
    "str": null,
    "strList": null
}

若希望ResponseDto轉JSON時排除全部值為null的屬性,可在ResponseDto的類別名稱前加上@JsonInclude(JsonInclude.Include.NON_NULL)

ResponseDto

import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResponseDto {

    private Integer num;
    private String str;
    private List strList;

    // getter setter...
}

此時呼叫/test時,回傳的JSON就不會包含值為null的屬性。

{
    "num": 20000
}

@JsonInclude也可針對個別屬性設定如下,改把@JsonInclude放在屬性名稱前即可。

ResponseDto

import com.fasterxml.jackson.annotation.JsonInclude;

public class ResponseDto {

    private Integer num;
    private String str;

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private List strList;

    // getter setter...
}

此時呼叫/test時,回傳的JSON就不會包含值為null且設有@JsonInclude(JsonInclude.Include.NON_NULL)的屬性。

{
    "num": 20000,
    "str": null
}

@JsonInclude其他可用的設定值如下:


沒有留言:

張貼留言