使用Jackson序列化泛型类型

时间:2016-02-16 12:56:47

标签: java json serialization jackson

我使用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,但是,当我序列化一个对象(如UUID)时,它没有@JsonValue注释,它会返回预期的UUID字符串。

创建我自己的类没有@JsonValue注释没有相同的效果。在这种情况下,serialize(new MayClass(2.0))返回地图{"数字":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(和其他预定义的可序列化类)按预期序列化,但我自己的可序列化类没有?另外,如何让我的可序列化类正确序列化?

1 个答案:

答案 0 :(得分:0)

Jackson预定义了UUID,URI,Date等序列化程序和反序列化程序,因此没有必要进行注释。

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