Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反序列化番石榴';s与Jackson一起的桌子“扔”;JsonMappingException:找不到适用于类型“的构造函数”;_Java_Json_Jackson_Guava - Fatal编程技术网

Java 反序列化番石榴';s与Jackson一起的桌子“扔”;JsonMappingException:找不到适用于类型“的构造函数”;

Java 反序列化番石榴';s与Jackson一起的桌子“扔”;JsonMappingException:找不到适用于类型“的构造函数”;,java,json,jackson,guava,Java,Json,Jackson,Guava,我使用的是jackson数据类型guava。我正试图从JSON反序列化一个表,但遇到了一个异常 我的代码是: @Test public void jsonTable() throws IOException { Table<String, String, String> table = HashBasedTable.create(); table.put("row1", "col1", "cell11"); table.put("row1", "col2",

我使用的是
jackson数据类型guava
。我正试图从JSON反序列化一个表,但遇到了一个异常

我的代码是:

@Test
public void jsonTable() throws IOException {
    Table<String, String, String> table = HashBasedTable.create();
    table.put("row1", "col1", "cell11");
    table.put("row1", "col2", "cell12");
    table.put("row2", "col1", "cell21");
    table.put("row2", "col2", "cell22");

    ObjectMapper mapper = new ObjectMapper()
            .registerModule(new GuavaModule());

    String tableJson = mapper.writeValueAsString(table);
    System.out.println(tableJson);

    Table<String, String, String> deserializedTable = mapper.readValue(tableJson, HashBasedTable.class);
}
这很有意义,因为HashBasedTable没有默认构造函数。我们应该使用HashBasedTable.create()构建它。我怎么能告诉杰克逊呢

在上,我发现了如何反序列化番石榴的多重映射:

@Test
public void convert() throws JsonParseException, JsonMappingException,
        JsonProcessingException, IOException {

    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(new GuavaModule());

    Multimap<String, NavItem> navs = objectMapper.readValue(
            objectMapper.treeAsTokens(objectMapper.readTree(jsonString)),
            objectMapper.getTypeFactory().constructMapLikeType(
                    Multimap.class, String.class, NavItem.class));

    logger.info(navs);

    assertThat(navs.keys(), hasItems("123455", "999999"));
}
@测试
public void convert()抛出JsonParseException、JsonMappingException、,
JsonProcessingException,IOException{
ObjectMapper ObjectMapper=新的ObjectMapper();
registerModule(新的GuavaModule());
Multimap navs=objectMapper.readValue(
objectMapper.treeAsTokens(objectMapper.readTree(jsonString)),
objectMapper.getTypeFactory().constructMapLikeType(
Multimap.class、String.class、NavItem.class));
记录器信息(导航);
资产(navs.keys(),hasItems(“123455”、“999999”);
}
如何将其应用于表格?没有ConstructableLikeType这类东西。

首先,尝试使用而不是jackson数据类型guava,因为


对Guava的
的支持似乎不完整,因为存在一些问题。因为它是开源的,所以你可以自己做(如果你这样做,请回馈!)-你可以使用其他人写的东西,比如(这也表明支持序列化,但不支持反序列化)。

谢谢。我想我将把
转换成
映射
,然后对其进行序列化/反序列化。顺便说一句,jackson数据类型集合文档应该提到库中每个集合的支持状态(特别是如果它完成了一半-这是非常误导的)。
@Test
public void convert() throws JsonParseException, JsonMappingException,
        JsonProcessingException, IOException {

    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(new GuavaModule());

    Multimap<String, NavItem> navs = objectMapper.readValue(
            objectMapper.treeAsTokens(objectMapper.readTree(jsonString)),
            objectMapper.getTypeFactory().constructMapLikeType(
                    Multimap.class, String.class, NavItem.class));

    logger.info(navs);

    assertThat(navs.keys(), hasItems("123455", "999999"));
}