Jackson @JsonIgnore、@JsonIgnoreProperties 和@JsonIgnoreType将对象序列化为 JSON 时忽略某些字段

时间:2025-02-17 22:39:55

2. 使用@JsonIgnoreProperties 在类级别忽略字段

我们可以在类级别忽略特定字段,使用@JsonIgnoreProperties注释并指定字段:
package ;

import ;

@JsonIgnoreProperties(value = {
    "id",
    "firstName"
})
public class CustomerDTO {
    private final String id;
    private final String firstName;
    private final String lastName;

    public CustomerDTO(String id, String firstName, String lastName) {
         = id;
         = firstName;
         = lastName;
    }

    public String getId() {
        return id;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}

让我们用main()方法测试上面的代码,注意在对象被写入 JSON 之后,该字段确实不是输出的一部分:

package ;

import ;
import ;

public class IgnoreFieldTest {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();

        CustomerDTO dtoObject = new CustomerDTO("CUST100", "Tony", "Stark");

        String dtoAsString = (dtoObject);

        (dtoAsString);
    }
}

输出:
{"lastName":"Stark"}
请注意,我们忽略了CustomerDTO的两个字段“id”“firstName” ,只打印了“lastName”

3. 使用@JsonIgnore 在字段级别忽略字段

我们也可以直接通过字段上的@JsonIgnore注解直接忽略字段:
package ;

import ;

public class CustomerDTO {

    @JsonIgnore
    private final String id;

    @JsonIgnore
    private final String firstName;
    private final String lastName;

    public CustomerDTO(String id, String firstName, String lastName) {
         = id;
         = firstName;
         = lastName;
    }

    public String getId() {
        return id;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getLastName() {
        return lastName;
    }
}

让我们用main()方法测试上面的代码,注意在对象被写入 JSON 之后,该字段确实不是输出的一部分:

package ;

import ;
import ;

public class IgnoreFieldTest {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();

        CustomerDTO dtoObject = new CustomerDTO("CUST100", "Tony", "Stark");

        String dtoAsString = (dtoObject);

        (dtoAsString);
    }
}

输出:

{"lastName":"Stark"}
请注意,我们使用@JsonIgnore注释忽略了CustomerDTO的两个字段“id”“firstName” ,并且只打印了“lastName”