【问题标题】:Serializing generic types using Jackson使用 Jackson 序列化泛型类型
【发布时间】:2016-05-27 18:33:44
【问题描述】:

我使用 Jackson 编写了自己的序列化程序。它接受一个变量或类并返回任何简单类型的值。

示例:serialize(new MyClass(2.0)) 将返回值为 2.0 的 double,其中 MyClass 如下所示:

public class MyClass {
  private double number;

  public MyClass(double number) {
    this.number = number;
  }

  @JsonValue
  public double getNumber() {
    return number;
  }
}

所以要获得正确的值,我需要设置@JsonValue,但是,当我序列化一个没有@JsonValue 注释的对象(如UUID)时,它会返回预期的UUID 字符串。

在没有@JsonValue 注释的情况下创建我自己的类没有相同的效果。在这种情况下,serialize(new MayClass(2.0)) 返回映射 {"number":2.0} 其中 MyClass 如下所示:

public class MyClass implements Serializable, Comparable<MyClass> {
  private double number;

  public MyClass(double number) {
    this.number = number;
  }

  public double getNumber() {
    return number;
  }

  @Override
  public int compareTo(MyClass obj) { return 0; }
}

我的问题是,为什么 UUID(和其他预定义的可序列化类)按预期序列化,但我自己的可序列化类却没有?另外,如何让我的可序列化类正确序列化?

【问题讨论】:

  • 我想你的问题在这里得到了回答:stackoverflow.com/questions/13432761/…
  • 该解决方案仍然需要使用注释。特别是在这种情况下@JsonSerialize。诸如 UUID 和 URI 之类的类(这些只是我使用的,但它适用于所有 Serializable 和 Comparable 类)序列化为正确的字符串(而不是映射),绝对不使用与 Json 相关的注释。这是我需要复制的行为。

标签: java json serialization jackson


【解决方案1】:

Jackson 已经预定义了 UUID、URI、Date 等序列化器和反序列化器,因此不需要注解。

如果您想在没有注释的情况下序列化您的类,则需要编写自定义序列化器和反序列化器。例如 MyClassSerializer。

【讨论】:

    猜你喜欢
    • 2012-10-18
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 2014-04-05
    相关资源
    最近更新 更多