使用 Jackson 将具有泛型的类序列化为 JSON

Jam*_*707 3 java generics serialization json date

我有一个表示问卷的对象结构,我需要序列化为 JSON。该结构的一类是 OpenQuestion,此类使用具有两个参数的泛型。当使用的类型之一是 Date 时,问题就开始了,日期序列化错误,如 long。

班级代码:

public class OpenQuestion <valueType,validationType> extends AbstractQuestion implements    Serializable {
    private valueType value;
    private validationType minValue;
    private validationType maxValue;
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果散列映射总是使用日期,我看到了如何在散列映射中序列化日期,但在这种情况下,我使用带有字符串、整数或日期的类。

有什么想法可以解决吗?谢谢

Cal*_*lum 6

您可以JsonTypeInfo为此添加注释。有两种使用方法:

  • 让它自动向您的对象添加类型注释,因此它知道将其反序列化为什么。
  • 添加自定义类型解析器,为您处理此问题。

第一个会使您的 JSON 变得丑陋,但只需要很少的额外代码,并且不会强迫您制作自定义序列化程序。后者更难,但会产生更清晰的 JSON。总体而言,问题部分在于您的一种类型未以 JSON (Date) 建模,因此您可能需要将其序列化为 JSON 文件中的整数或字符串类型。

前一个选项看起来有点像这样:

@JsonTypeInfo( use = Id.CLASS, include = As.WRAPPER_PROPERTY )
private valiationType minValue;
Run Code Online (Sandbox Code Playgroud)

应该编码一个字符串值,例如:

{ __type = "java.lang.String", value = "Hello, World" }
Run Code Online (Sandbox Code Playgroud)

不保证准确,因为这主要来自记忆!