У меня есть следующие объекты:Фильтр вложенных объектов с помощью Джексона BeanPropertyFilter
@JsonFilter("myFilter")
public class Person {
private Name name;
private int age;
public Name getName() {return name;}
public void setName(Name name) {this.name = name;}
public int getAge() {return age;}
public void setAge(int age) {this.age = age;}
}
@JsonFilter("myFilter")
public class Name {
private String firstName;
private String lastName;
public String getFirstName() {return firstName;}
public void setFirstName(String firstName) {this.firstName = firstName;}
public String getLastName() {return lastName;}
public void setLastName(String lastName) {this.lastName = lastName;}
}
Я написал метод Маршаллу объект Person, как это:
@Test
public void test() throws Exception {
Person person = new Person();
person.setAge(10);
Name name = new Name();
name.setFirstName("fname");
name.setLastName("lastname");
person.setName(name);
ObjectMapper mapper = new ObjectMapper();
FilterProvider filters = new SimpleFilterProvider().addFilter("myFilter",
SimpleBeanPropertyFilter.filterOutAllExcept("name.firstName"));
System.out.println(mapper.filteredWriter(filters).writeValueAsString(person));
}
То, что я хотел бы видеть это JSON например:
{"name":{"firstName":"fname"}}
Возможно ли это?
Да Джексон, кажется, не быть (легкий) способ поднять график к свойствам ancelstors, поэтому вы не смогли создать полное имя свойства для проверки. Как вы указали, это сломается для более сложных классов (например, вы не могли бы включить только «person.id», если бы было поле «person.employer.id» ... вы бы сериализовали любое поле на графике который был назван «id» или «работодателем». – NobodyMan