10

次のオブジェクトがあります。

@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"}}

そのようなことは可能ですか?

4

2 に答える 2

7

わかりました。Varargs を使用すると、これはもう少しきれいになりますが、まあまあです。同じ名前のプロパティを持つ 2 つの内部 Bean がないことを願っています。二人の区別がつかないだろう

    FilterProvider filters = new SimpleFilterProvider()
            .addFilter("myFilter", SimpleBeanPropertyFilter
                    .filterOutAllExcept(new HashSet<String>(Arrays
                            .asList(new String[] { "name", "firstName" }))));
于 2012-06-14T18:20:01.580 に答える