java - 使用 Jackson 序列化具有 JSON 通用性的类

标签 java json generics date serialization

我有一个表示问卷的对象结构,我需要序列化为 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/

相关文章:

python - 如何从 Python POST 请求中获取 JSON 数据

java - Gson gson = new Gson().toJson(data) - 不兼容的类型

c# - 如何在 C# 的通用抽象类中定义类型 T 必须具有字段 “ID”

java - 解析 <T extends Interface<T>> 并结束潜在的无限循环

java - 在不卡住线程的情况下 Ping 服务器

java - 关于在 Java 中以 vector 形式输入

javascript - 在 JSON.parse 中使用 BsonDocument.ToJson 的结果失败

java - 将方法声明为 `return this` 有什么好方法吗?

java - 是否可以在调试端获取JDI当前Java中的StackFrame?

java - 如何从 Eclipse 编辑器 (Java) 中快速查找接口(interface)方法的参数?