我想使用定制名称(不要输入班级名称)来序列化
我知道this。请不要参考这个答案。
如何使用jackson序列化pojo类名。 示例:
public class A{
private int a;
//getter seeter
}
序列化A时要像这样:
{"a": 1,"class":"ARequest"}
如何使用给定的className
序列化Pojo。如果没有重写toString()
方法,是否有可能。我在改造Post方法主体中使用了此类。
有一点我不以类名的形式将其序列化:
{"ARequest":{"a":5}}
答案 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")