我可以使用Jackson @JsonView序列化一个属性吗?

时间:2017-05-04 20:13:55

标签: java json jackson json-view

我的REST API中有一个复杂的类:

class Complicated {
    String foo
    Integer bar
    Instant baz
    ...
    // lots more
}

我还有另一个包含Complicated

集合的类
class HasComplications {
    String description

    List<Complicated> complications
}

当我序列化HasComplications(使用Spring MVC)时,我只需要每个Complicated的片段:

{
    description: "hello world",
    complications: [ {
      foo: "foo1",
      bar: 42
    ] }
}

当我直接序列化Complicated时,我可以使用@JsonView告诉Jackson哪些属性要序列化:

class Complicated {
    @JsonView(Views.Snippet) String foo
    @JsonView(Views.Snippet) Integer bar
    Instant baz
    ...
    // lots more
}

但是,当我在Complicated属性中传递序列化complications时,Jackson序列化了所有属性。有没有办法让我以声明方式告诉它“在序列化这个属性时使用这个视图”?

class HasComplications {
    String description

    @UseJsonView(Views.Snippet)
    List<Complicated> complications
}

1 个答案:

答案 0 :(得分:2)

目前没有这样的功能。

您可以做的一件事是在财产上使用@JsonIgnoreProperties。 但是,我认为这只适用于POJO值,而不适用于ListMap的内容,所以这对您没有帮助。 提交一个问题以使其适用于结构化类型可能是有意义的。