JAX-RS自定义@Provider用于

时间:2015-10-12 16:10:15

标签: java jax-rs

我有一个包含以下返回类型的API:

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

Complex1和Complex2:

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

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

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

我尝试为Complex2添加Provider。但是JAX-RS似乎并不知道它,因为它不是实际的返回类型。如果我添加一个Provider for Example JAX-RS使用我的自定义Provider。但是有一个自定义Provider for Example有一个缺点,我必须为Complex1添加逻辑,虽然标准序列化对于Complex1是可以的。

在这个示例中,也可以为Complex1进行序列化,但在我的场景中,Complex1非常庞大,并且希望避免为Complex1实现序列化逻辑。

你有什么建议吗?

1 个答案:

答案 0 :(得分:1)

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

在杰克逊级别,我们可以告诉杰克逊如何使用JsonSerializer序列化。您可以查看this article来编写自定义序列化程序。一旦你有了serilizer,你就可以使用自定义序列化器

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