java使用Jackson反序列化为字符串或对象
我有一个物体有时看起来像这样:
{
"foo" : "bar",
"fuzz" : "bla"
}
有时看起来是这样的:
{
"foo" : { "value" : "bar", "baz": "asdf" },
"fuzz" : { "thing" : "bla", "blip" : "asdf" }
}
这些课程看起来像:
public class Foo {
String value;
String baz;
}
public class Fuzz {
String thing;
String blip;
}
其中第一个案例是第二个案例的简写。我想一直反序列化到第二个案例中
此外,这在我们的代码中是一种非常常见的模式,因此我希望能够以一种通用的方式进行序列化,因为还有其他类似于上面Foo
的类具有相同的模式,即使用字符串作为更复杂对象的语法糖
我想使用它的代码应该是这样的
public class Thing {
@JsonProperty("fuzz")
Fuzz fuzz;
@JsonProperty("foo")
Foo foo;
}
如何编写一个自定义反序列化程序(或其他模块)来处理这两种情况
# 1 楼答案
为了使其通用,我们需要能够指定要在对象中为
JSON primitive
设置的名称。一些灵活性提供了注释方法。让我们定义简单注释:名称意味着:如果原语出现在
JSON
中,请使用value()
获取给定原语的属性名称。它将JSON primitive
与POJO
字段绑定。处理JSON object
和JSON primitive
的简单反序列化程序:现在我们需要如下注释
POJO
字段:我假设所有的类都是
POJO
-s,并且遵循所有规则,有getters
、setters
和默认构造函数。如果构造函数不存在,您需要以某种方式更改此beanDeserializer.getValueInstantiator().getDefaultCreator().call()
行,以满足您的需求示例应用程序:
缩短
JSON
的打印:对于完整的
JSON
负载: