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

使用自定义构造函数将JsonNode转换为POJO

皇甫喜
2023-03-14

类似于将JsonNode转换为POJO和将JsonNode转换为java array,但无法找到问题的确切解决方案。

以下是我的POJOs声明:

public class Building implements Serializable {

    private BuildingTypes type;

    public Building(BuildingTypes type) {
        this.type = type;
    }

    public BuildingTypes getType() {
        return type;
    }   
}

public enum BuildingTypes {
    TRIPLEX, DUPLEX, HOUSE
}

所以在我的测试中,我想得到一个建筑列表,并将json列表转换/绑定到一个真实对象建筑列表。

以下是我想做的:

Result result = applicationController.listLatestRecords();
String json = contentAsString(result);
JsonNode jsonNode = Json.parse(json);

List<Building> buildings = new ArrayList<>();

buildings.add(mapper.treeToValue(jsonNode.get(0), Building.class));

但是,我得到以下错误:

com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class domain.building.Building]: can not instantiate from JSON object (need to add/enable type information?)

显然,如果我在Building类中删除了构造函数,并为字段类型添加了setter,它就会起作用。但是如果我确实有一个要求,迫使我避免使用setter,那么必须使用构造函数来初始化类型值吗?如何将json轻松绑定/转换为建筑列表?

我还尝试了以下方法,但没有成功:

List<Building> buildings = mapper.readValue(contentAsString(result),
            new TypeReference<List<Building>>() {});

共有1个答案

邵博远
2023-03-14

错误消息说明了一切,您的构建类没有默认构造函数,因此Jackson无法创建它的实例。

在建筑类中添加默认构造函数

public class Building implements Serializable {
    private BuildingTypes type;

    public Building(BuildingTypes type) {
        this.type = type;
    }

    // Added Constructor 
    public Building() {
    }

    public BuildingTypes getType() {
        return type;
    }   
}
 类似资料:
  • 我正在使用websocket和JsonNode开发Play framewrok 2。前端通过使用websocket连接到play framework后端。我将javascript数组转换为json节点,并通过使用webscoket连接将其发送到后端。现在,我的问题是如何将json对象转换为java数组或任何合适的结构,以便操作数据。 这是我创建的json对象 这是动态填充的数组 下面的代码发送数据

  • 我试图实现的是在自定义反序列化器中将JsonNode转换为POJO(=反序列化它)。 大多数其他答案建议使用对象映射器,但我在反序列化方法中没有对象映射器。 这是我的自定义反序列化程序: (

  • 主要内容:转换构造函数,再谈构造函数,对 Complex 类的进一步精简在 C/ C++ 中,不同的数据类型之间可以相互转换。无需用户指明如何转换的称为自动类型转换(隐式类型转换),需要用户显式地指明如何转换的称为强制类型转换。 自动类型转换示例: 编译器对 7.5 是作为 double 类型处理的,在求解表达式时,先将 a 转换为 double 类型,然后与 7.5 相加,得到和为 13.5。在向整型变量 a 赋值时,将 13.5 转换为整数 13,然后赋给 a。整

  • 在.citydoor.imports.catalog.tools中打包;

  • 本文向大家介绍Android自定义View构造函数详解,包括了Android自定义View构造函数详解的使用技巧和注意事项,需要的朋友参考一下 初始Custom View的构造函数 之前写过一篇实现圆形进度条的博客(自定义圆形进度条),通常我们在实现Custom View的时候,都会先继承View并实现View的三个构造函数,例如: 网上有很多关于三个构造函数使用时机的说法,但是说法正确的却没有几

  • 问题内容: 这似乎有点不正常,但我在寻找一个有效的方式来变换/映射成。 我将模型的一些信息存储在json文件中,并且我必须支持模型的几个版本。 我要做的是将json文件加载到JsonNode的内存中,应用一些版本控制策略以使其与我的Model的最新版本匹配。 除非有更快的方法,否则我可能最终将手动将其应用于模型 问题答案: 在Jackson 2.4中,可以进行如下转换: 杰克逊在哪儿? 在旧版的J