假设我有以下课程:
public class Parent {
public int age;
@JsonUnwrapped
public Name name;
}
生成JSON:
{
"age" : 18,
"first" : "Joey",
"last" : "Sixpack"
}
如何将其反序列化回父类?我可以使用@JsonCreator
@JsonCreator
public Parent(Map<String,String> jsonMap) {
age = jsonMap.get("age");
name = new Name(jsonMap.get("first"), jsonMap.get("last"));
}
但这也有效地向父类添加了JsonIgnoreProperties(ignoreUnknown=true),因为所有属性都映射到这里。因此,如果希望未知JSON字段引发异常,则必须自己进行。此外,如果映射值可能不是字符串,则必须进行一些手动类型检查和转换。杰克逊有没有办法自动处理这个案子?
编辑:我可能有点疯狂,但尽管文档中从未明确提及,但这似乎确实有效:http://fasterxml.github.io/jackson-annotations/javadoc/2.2.0/com/fasterxml/jackson/annotation/JsonUnwrapped.html
我很确定以前这对我不起作用。尽管如此,当需要自定义逻辑来反序列化未包装的多态类型时,建议的@JsonCreator方法可能是首选方法。
@JsonUn包装
适用于序列化和反序列化,您不需要采取任何额外的步骤。
它也适用于反序列化,尽管文档中没有明确提到它,如您所说。请参见此处的单元测试以获取对JsonUnwrapped的反序列化的确认-https://github.com/FasterXML/jackson-databind/blob/d2c083a6220f2875c97c29f4823d9818972511dc/src/test/java/com/fasterxml/jackson/databind/struct/TestUnwrapped.java#L138
您可以将JsonCreator与JsonProperty一起用于每个字段:
@JsonCreator
public Parent(@JsonProperty("age") Integer age, @JsonProperty("firstName") String firstName,
@JsonProperty("lastName") String lastName) {
this.age = age;
this.name = new Name(firstName, lastName);
}
在这种情况下,Jackson会为您进行类型检查和未知字段检查。
问题内容: 说我有以下课程: 产生JSON: 如何将其反序列化回Parent类?我可以使用@JsonCreator 但这也会有效地添加到Parent类,因为所有属性都映射到此处。因此,如果您希望未知的JSON字段引发异常,则必须自己执行此操作。另外,如果映射值可能不是字符串,则必须进行一些手动类型检查和转换。杰克逊有办法自动处理此案吗? 编辑: 我可能疯了,但是尽管在文档中没有明确提及,但实际上这
本文向大家介绍什么是序列化与反序列化?相关面试题,主要包含被问及什么是序列化与反序列化?时的应答技巧和注意事项,需要的朋友参考一下 序列化:将对象状态转换为可保持或传输的格式的过程。将对象实例的字段及类的名称转换成字节流,然后把字节流写入数据流 反序列化:将流转换为对象。 这两个过程结合起来,可以轻松地存储和传输数据。
我在试着读我的。json文件。Is是一个车辆存储类。 这是错误: com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造的实例(尽管至少存在一个Creator):无法构造的实例(尽管至少存在一个Creator):没有字符串参数构造函数/工厂方法来从[Source:(File); line: 1,列: 1]处的字符串值反序列化
问题内容: 我无法找出使用杰克逊实现自定义序列化/反序列化的正确方法。我有很多类(〜50),它们带有应被序列化/反序列化而不是原始的原始字段。喜欢: 所有序列化和反序列化都非常相似,我只需要在整数之后添加一个后缀(C,页面,米等)。 一种简单的方法是在每个这样的字段中添加一对/ 注释并实现它们。但是我最终会得到100个 非常相似的 序列化器/反序列化器。 我想到了添加自定义注释的各个领域,说或,这
可以序列化/反序列化< code >映射吗 在这种特殊情况下,我知道总是,和 - 第三方类(我有序列化器和反序列化器),其他值是盒装原语。 有可能和杰克逊做这样的事吗?使用MapSerializer/MapDeserializer可以做到这一点吗?(我找不到任何例子)
我对Jackson有一个错误的理解,就是将json文件反序列化为poco。这是我的代码: 我的POCO命名为AnimalBean: }还有我的JSON文件: } 当我执行我的代码时,我有以下错误:未识别的字段“动物园”(类动画豆),未标记为可忽略的。我知道问题是我的json文件开始不直接由动物,但我不能改变它,因为它不是我的。我已经尝试把对象apper.configure(Deseriazatio