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 如何使用 JsonSerializer
s 进行序列化。您可以查看 this article 来编写自定义序列化程序。一旦你有了序列化器,你就可以用自定义序列化器
注释Complex2
class
@JsonSerialize(using = Complex2Serializer.class)
public class Complex2 {}
我有一个 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 如何使用 JsonSerializer
s 进行序列化。您可以查看 this article 来编写自定义序列化程序。一旦你有了序列化器,你就可以用自定义序列化器
Complex2
class
@JsonSerialize(using = Complex2Serializer.class)
public class Complex2 {}