在不更改POJO的情况下为REST端点提供多态反序列化/序列化参数

时间:2018-04-30 10:39:11

标签: java jackson jax-rs

我正在开发JAX-RS应用程序,其中端点使用并生成JSON类型数据。我为此目的使用Jackson

据我所知,Jackson中处理多态行为的方法之一是在POJO上使用@JsonTypeInfo@JsonSubTypes

但在我看来,POJO不是代码的一部分,它们已经嵌入到JAR文件中,我无法编辑它们。

有没有办法可以在没有POJO注释的情况下在外部将此信息指定给Jackson

请指出我之前已经讨论过的正确方向。

1 个答案:

答案 0 :(得分:0)

  

有没有办法可以在没有POJO注释的情况下向Jackson外部指定此信息?

如果考虑混合注释,使用注释仍然是一种有效的方法。

当修改源代码不是一个选项时,您可以使用混合注释Jackson annotations添加到bean。您可以将其视为在运行时添加更多注释的面向方面的方式,以增加静态定义的注释。

首先定义混合注释界面或类:

@JsonTypeInfo(use = Id.CLASS, include = As.PROPERTY, property = "class")
public interface FooMixIn {

}

然后配置ObjectMapper以将定义的界面用作POJO的混合:

ObjectMapper mapper = new ObjectMapper().addMixIn(Foo.class, FooMixIn.class); 

杰克逊认可的所有annotation sets都可以混入。有关详细信息,请查看杰克逊documentation