Pojo类名序列化

时间:2018-07-30 09:35:46

标签: java jackson retrofit2

我想使用定制名称(不要输入班级名称)来序列化

我知道this。请不要参考这个答案。

如何使用jackson序列化pojo类名。 示例:

public class A{
private int a;
//getter seeter
}

序列化A时要像这样:

{"a": 1,"class":"ARequest"}

如何使用给定的className序列化Pojo。如果没有重写toString()方法,是否有可能。我在改造Post方法主体中使用了此类。

有一点我不以类名的形式将其序列化:

{"ARequest":{"a":5}}

2 个答案:

答案 0 :(得分:1)

@JsonTypeInfo注释您的班级:

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.PROPERTY, property="class")
public class Foo {

    public String bar;

    // Getters and setters
}

然后考虑以下代码:

ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writer().withDefaultPrettyPrinter().writeValueAsString(foo));

它将产生以下输出:

{
  "class" : "Foo",
  "bar" : "test"
}

如果要使用类的全限定名称,例如org.example.Foo,则可以使用JsonTypeInfo.Id.CLASS代替JsonTypeInfo.Id.NAME

答案 1 :(得分:1)

您可以按照here所述使用@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="class")