我需要与@JsonIgnore
相反,我需要告诉杰克逊忽略对象上的所有属性,除了我注释的对象。我不小心想要有人添加属性并忘记添加@JsonIgnore
然后我将其暴露在我不想要的地方。
任何人都知道如何实现这一目标?
答案 0 :(得分: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;
}
}
POJO有两个我们不想序列化的属性(firstName
和lastName
)。我们只想序列化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”}
答案 1 :(得分:1)