当前位置: 首页 > 知识库问答 >
问题:

JSON反序列化过程中数据类型不匹配时POJO字段中的默认值

韦绍晖
2023-03-14

当我们将JSON反序列化为POJO时,JACKSON会在数据类型不匹配的情况下抛出一个不匹配输入异常,这是意料之中的。所以我的问题是,“在Jackson或Gson中是否有任何特性标志可用,以在反序列化期间设置不匹配字段的默认值?”

import com.fasterxml.jackson.databind.ObjectMapper;

import lombok.Data;

import java.io.IOException;

public class JsonSample {
@Data
static class Address {
    String houseAddress;
}

@Data
static class InnerJsonClass {
    Integer integerField;
    Address address;
}

public static void main(String[] args) {
    String jsonInput = "{\"integerField\": 1,\"address\":\"hello\"}";
    try {
        ObjectMapper objectMapper = new ObjectMapper();
        InnerJsonClass object = objectMapper.readValue(jsonInput, InnerJsonClass.class);
        System.out.println(object.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
}}

共有1个答案

许彦
2023-03-14

地址是一个对象,而不是字符串。

String jsonInput = "{\"integerField\": 1,\"address\":{\"houseAddress\": \"hello\"}}";

试试这个

 类似资料:
  • 我有一个带有lombok注释的POJO,我的JSON通过Jackson将它反序列化,如下所示: 当jackson试图反序列化仅列出一个响应时 缺少什么来确保所有属性要么包含反序列化JSON中的相应值,要么包含默认分配值的空列表? -更新-这不是问题,直到我从Spring 1.3.5升级到1.4.2,这也将我的Jackson版本从2.6.6升级到2.8.4

  • 问题内容: 可以说我有以下格式的JSON: 我试图避免自定义反序列化器,并尝试将上述JSON(称为Wrapper.java)反序列化为Java POJO。“类型”字段指示“对象”反序列化,即。type = foo表示使用Foo.java反序列化“ object”字段。(如果type = Bar,则使用Bar.java反序列化对象字段)。元数据/所有者将始终使用相同的反序列化方式,每个方法都使用一个

  • 问题内容: 我想反序列化JSON(使用Jackson 1.9.11和RestTemplate 1.0.1),其中一个字段可能具有更多类型含义,例如: 要么 一个或另一种情况对于一个特定类型的设置器(String od custom Response类)都可以正常工作,但是当我将实体bean重写的设置器放入能够处理这两种情况时,将引发异常: 我当时在考虑三种解决方案,但没有任何一种可行: 仅使用St

  • 我正在将RedditAPI中的一些内容反序列化到POJO中。我的目标是尽可能简化代码,因为reddit中实体之间的JSON结构通常是相同的。 例如,反序列化链接对象的JSON如下所示: 我可以反序列化这一点没有问题,但由于reddit注释的不同之处在于其类型为t1,并且在其下方的数据对象中具有不同的结构,因此我希望将相同的类结构重新用于JSON包装,而不必创建多个具有一行或两行差异的复制类。 我创

  • 当反序列化各种JSON消息时,我希望为某种类型的属性提供默认值。通常建议简单地在类中指定值,但如果必须跨许多类这样做,这很容易出错。您可能会忘记一个值,并以而不是默认值结束。我的意图是将每个的属性设置为。由于正是试图消除的内容,因此将它们与Jackson一起使用是令人沮丧的。 Jackson允许您自定义反序列化过程的大多数特性都集中在作为输入的JSON上,而不是围绕实例化要反序列化到的对象的过程。

  • 问题内容: 一些实现IEnumerable的自定义类型不一定具有后备集合。它们可以动态生成,例如使用“ yield”或LINQ。这是一个例子: 我发现Json.NET的默认序列化是枚举每个值并将这些值存储在JavaScript数组中(我不想要)。然后,默认的反序列化器将无法反序列化集合,因为它无法填充。在这些情况下,我希望Json.NET跳过默认的JavaScript数组序列化,而只存储类的成员。