gpt4 book ai didi

java - Jackson 2.0 忽略类中的所有属性

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:32:16 26 4
gpt4 key购买 nike

我需要 @JsonIgnore 的反面,我需要告诉 Jackson 忽略对象上的所有属性,除了我注释的属性。我不会意外地希望有人添加一个属性而忘记添加一个 @JsonIgnore 然后我将它暴露在我不想暴露的地方。

有人知道怎么实现吗?

最佳答案

实现类似功能的一种方法是使用 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;
}
}

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

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

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

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

final ObjectMapper mapper = new ObjectMapper();
String json = mapper.writer(filters).writeValueAsString(new Person("Johnny", "Puma"));

字符串将包含:

{"fullName":"Johnny Puma"}

关于java - Jackson 2.0 忽略类中的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28768594/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com