Loại bỏ các thuộc tính Null khi convert Object sang Json

Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu cách loại bỏ các thuộc tính(field) có giá trị null khi convert Object sang Json.

Loại bỏ toàn bộ field Null trong class

Jackson cho phép chúng ta loại bỏ toàn bộ field null khi serialize ở từng class riêng biệt với @JsonInclude annotation được chú thích ở đầu class.

Ví dụ lược bỏ toàn bộ các filed có giá trị null của MyDto class.

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

    private String stringValue;

    private Integer intValue;

    public MyDto() {
    }

    public String getStringValue() {
        return stringValue;
    }

    public void setStringValue(String stringValue) {
        this.stringValue = stringValue;
    }

    public Integer getIntValue() {
        return intValue;
    }

    public void setIntValue(Integer intValue) {
        this.intValue = intValue;
    }
}

Bây giờ, nếu serialize MyDto object rỗng sang Json sẽ được Json string rỗng.

ObjectMapper mapper = new ObjectMapper();
MyDto dtoObject = new MyDto();
String dtoAsString = mapper.writeValueAsString(dtoObject);
// {}

Còn nếu 1 hoặc cả 2 field có giá trị khác null thì chúng sẽ được serialize sang Json.

ObjectMapper mapper = new ObjectMapper();
MyDto dtoObject = new MyDto("string value", 10);
String dtoAsString = mapper.writeValueAsString(dtoObject);
// {"stringValue":"string value","intValue":10}

Loại bỏ field Null trong class

Cũng với @JsonInclude chúng ta có thể chú thích tại field – level để loại bỏ nó trong serialization nếu có giá trị null.

Ví dụ chỉ loại bỏ stringValue khi nó có giá trị null.

public class MyDto {

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String stringValue;

    private Integer intValue;
    // constructor, getter, setter
}
ObjectMapper mapper = new ObjectMapper();
MyDto dtoObject = new MyDto();
String dtoAsString = mapper.writeValueAsString(dtoObject);
// {"intValue":null}

Loại bỏ các thuộc tính Null ở tất cả class

Jackson cho phép chúng ta cấu hình ở mức cao nhất tạo ObjectMapper class. Cho phép loại bỏ tất cả các field null khi được serialize bởi ObjectMapper instance.

mapper.setSerializationInclusion(Include.NON_NULL);

Bây giờ, tất cả các field null ở bất kỳ class nào cũng đều bị lược bỏ khi serialize bởi mapper trên.

public class Main {

    public static void main(String[] agrs) throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        mapper.setSerializationInclusion(Include.NON_NULL);
        MyDto dtoObject = new MyDto();

        String dtoAsString = mapper.writeValueAsString(dtoObject);
        // {}

    }
}

Tóm lược

Lược bỏ các field null là một trong các công việc cơ bản nhầm có một file Json với dữ liệu tốt hơn, tránh những field rác trong file Json. Tuy nhiên có một số trường hợp lại yêu cầu giữ những field null khi chuyển qua Json phục vụ cho các yêu cầu riêng biệt, thì hãy nhớ nếu đã config global thì gỡ ra đi nhé.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x