Jackson 2.0忽略了课堂上的所有属性

chr*_*din 7 java jackson

我需要与之相反@JsonIgnore,我需要告诉杰克逊忽略对象上的所有属性,除了我注释的对象.我不小心想要有人添加一个属性而忘记添加一个@JsonIgnore然后我将它暴露在我不想要的地方.

谁知道如何实现这一目标?

was*_*ren 2

实现类似目标的一种方法是使用SimpleBeanPropertyFilter. 过滤器不能通过使用您希望包含的字段来解决问题,而是通过简单地定义要序列化的字段来解决问题。

如果您假设有以下 POJO:

@JsonFilter("personFilter")
public class Person {
    private final String firstName;
    private final String lastName;

    public Person(final String firstName, final String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getFullName() {
        return getFirstName() + " " + getLastName();
    }

    public String getLastName() {
        return lastName;
    }
}
Run Code Online (Sandbox Code Playgroud)

POJO 有两个我们不想序列化的属性(firstName和)。lastName我们只想序列化fullName)。

您可能已经注意到,@JsonFilter类顶部的注释指向一个命名过滤器,可以像这样创建:

// A filter that filter out all except for fullName
FilterProvider filters =
        new SimpleFilterProvider().addFilter(
                "personFilter",
                SimpleBeanPropertyFilter.filterOutAllExcept("fullName"));
Run Code Online (Sandbox Code Playgroud)

最后,您唯一需要做的就是ObjectMapper使用以下内容创建您的:

final ObjectMapper mapper = new ObjectMapper();
String json = mapper.writer(filters).writeValueAsString(new Person("Johnny", "Puma"));
Run Code Online (Sandbox Code Playgroud)

该字符串将包含:

{"fullName":"约翰尼·彪马"}