我怎么能不使用JAX-RS接口序列化对象的某个部分(子对象)?

时间:2018-02-21 11:56:31

标签: java jax-rs jackson2

我有以下课程:

class A {
    @JsonProperty("id")
    Integer id;

    @JsonProperty("b")
    B b;
    // constructors, getters, etc.
}

class B {
    @JsonProperty("id")
    Integer id

    // other properties ...

    @JsonProperty("c")
    C c;

    // getters and setters
}

class C {
    @JsonProperty("id")
    Integer id

    // other properties ...

    @JsonProperty("password")
    String password;
    // getters and setters
}

我"拥有"我的项目中的类A,类B和C来自另一个项目(DOM中包含JAR依赖项)。我通过调用REST接口收集B的信息。与B一起,来自C,其中包含密码。

当我向用户发送A时,所有对象都被序列化。这样,C(和密码)就会出现。

如何使用B发送A,但省略C?

我无法改变B和C:

  1. 我不能把@JsonIgnore放在B级的C上;
  2. B中没有setter,所以我不能a.getB()。setC(null)。
  3. 这是真正的问题: 1.我可以在REST界面中添加任何注释(我使用RESTEasy),以便Jackson可以在没有C类的情况下进行序列化吗?

    1. 或者,如果没有,我怎么能通过编码来做到这一点?
    2. 我不想创建另一个对象" B-like"并复制所有属性。应该有更好的方法(我希望)。

1 个答案:

答案 0 :(得分:1)

您可以在“b”上使用com.fasterxml.jackson.annotation中的@JsonIgnoreProperties批注:

class A {
    @JsonProperty("id")
    Integer id;

    @JsonProperty("b")
    @JsonIgnoreProperties({"c"})
    B b;
    // constructors, getters, etc.
}

我希望它可以帮到你。