JAX-RS Custom @Provider 用于类型的子集

JAX-RS Custom @Provider for a subset of the type

我有一个 API 具有以下 return 类型:

class Example {
  private Complex1 complex1;
  private Complex2 complex2;
}

复杂 1 和复杂 2:

class Complex1 {
  private String test1;
  private String test2;
}

class Complex2 {
  private String test3;
  private String test4;
}

现在我想为 Complex1 使用标准序列化,但为 Complex2 添加自定义序列化。

我尝试为 Complex2 添加 Provider。但是 JAX-RS 似乎没有意识到它,因为它不是实际的 return 类型。如果我为示例 JAX-RS 添加一个 Provider,则使用我的自定义 Provider。但是,为 Example 使用自定义 Provider 的缺点是我也必须为 Complex1 添加逻辑,尽管标准序列化对于 Complex1 是可以的。

在这个例子中,也可以对 Complex1 进行序列化,但在我的场景中,Complex1 很大,希望避免为 Complex1 实现序列化逻辑。

你有什么建议吗?

所以它不会那样工作。单个 JSON 提供程序用于整个序列化。它已经知道如何序列化整个对象。 Jackson 无法知道需要不同的提供者 mid-serialization(特别是因为 Jackson 甚至不知道提供者的任何知识,这是一个 JAX-RS 概念) .

虽然在 Jackson 级别,我们可以告诉 Jackson 如何使用 JsonSerializers 进行序列化。您可以查看 this article 来编写自定义序列化程序。一旦你有了序列化器,你就可以用自定义序列化器

注释Complex2 class
@JsonSerialize(using = Complex2Serializer.class)
public class Complex2 {}