我如何不使用 JAX-RS 接口序列化对象的某些部分(子对象)?

How can I NOT serialize some part (subobject) of an Object using JAX-RS interface?

我有以下 classes:

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
}

I "own" class A 在我的项目中,由 classes B 和 C 来自另一个项目(JAR 依赖项包含在 DOM 中)。我通过调用 REST 接口收集 B 的信息。与 B 一起出现的是 C,其中包含一个密码。

当我将 A 发送给用户时,所有对象都被序列化了。这样,C(和密码)就可以了。

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

我无法更改 B 和 C:

  1. 我无法在 class B 中将 @JsonIgnore 放在 C 上;
  2. B中没有setter,所以我不能a.getB().setC(null).

真正的问题来了: 1. 我可以在我的 REST 接口(我使用 RESTEasy)中放置任何注释,以便 Jackson 可以在没有 C 的情况下进行序列化 class?

  1. 或者,如果没有,我如何通过编码来做到这一点?

我不想创建另一个对象 "B-like" 并复制所有属性。应该有更好的方法(我希望)。

您可以在 "b" 上使用来自 com.fasterxml.jackson.annotation 的 @JsonIgnoreProperties 注释:

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

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

希望对你有所帮助