我有一个表示问卷的对象结构,我需要序列化为 JSON。 该结构的一类是 OpenQuestion,此类使用带有两个参数的泛型。 当使用的类型之一是 Date 时,问题就开始了,日期序列化错误,就像一个 long。
类代码:
public class OpenQuestion <valueType,validationType> extends AbstractQuestion implements Serializable {
private valueType value;
private validationType minValue;
private validationType maxValue;
...
}
我看到了如果散列映射始终使用日期,如何序列化散列映射中的日期,但在这种情况下,我将类与字符串、整数或日期一起使用。
有解决办法吗? 谢谢
最佳答案
您可以为此添加一个 JsonTypeInfo
注释。有两种使用方法:
- 让它自动为您的对象添加类型注释,以便它知道将其反序列化为什么。
- 添加自定义类型解析器,为您处理此问题。
第一个会使您的 JSON 变得丑陋,但只需要很少的额外代码,并且不会强制您制作自定义序列化程序。后者更难,但会产生更清晰的 JSON。总的来说,问题部分在于您的其中一种类型未在 JSON(日期)中建模,因此您可能需要将其序列化为 JSON 文件中的整数或字符串类型。
前一个选项看起来有点像这样:
@JsonTypeInfo( use = Id.CLASS, include = As.WRAPPER_PROPERTY )
private valiationType minValue;
这应该编码一个字符串值,像这样:
{ __type = "java.lang.String", value = "Hello, World" }
无法保证准确,因为这主要来自内存!
关于java - 使用 Jackson 序列化具有 JSON 通用性的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13432761/