将JsonNode转换为Java POJO

v440hwme  于 2023-08-08  发布在  Java
关注(0)|答案(1)|浏览(123)

我有一段代码:

HttpResponse<JsonNode> response = Unirest.post("https://json.islandia.com/v1/martorell")
                .basicAuth("624823", "8f1addd21a09d6b95eaefa8d60p4c05")
                .field("day", "28")
                .asJson();

        Root newJsonNode = new ObjectMapper().treeToValue(response.getBody(), Root.class);

字符串
但我有这个错误:第一个月

bfhwhh0e

bfhwhh0e1#

考虑到ObjectMapper#treeToValue()确实存在,请在文件开始时检查导入:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

字符串
如果您没有看到这些导入,这可以解释错误消息。
确保将Jackson libraries正确添加到项目的类路径中。您可以在Maven的pom.xml中添加以下依赖项:

<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.1</version>
    </dependency>
    <dependency>
        <groupId>com.mashape.unirest</groupId>
        <artifactId>unirest-java</artifactId>
        <version>1.4.9</version>
    </dependency>
</dependencies>


如果我尝试使用convertValue,我会得到:

No serializer found for class java.io.ByteArrayInputStream and no properties discovered to create BeanSerializer (to avoid exception, > disable SerializationFeature.FAIL_ON_EMPTY_BEANS)


因此,您正在尝试序列化一个ByteArrayInputStream对象,Jackson不知道如何在默认情况下序列化该对象。
HttpResponse.getBody()可能 * 不 * 返回JsonNode类型:相反,它可能会返回一个InputStream,需要手动将其转换为JsonNode,然后才能使用Jackson的转换功能。
例如:

HttpResponse<InputStream> response = Unirest.post("https://json.islandia.com/v1/martorell")
                .basicAuth("624823", "8f1addd21a09d6b95eaefa8d60p4c05")
                .field("day", "28")
                .asObject(InputStream.class);

ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(response.getBody());
Root newJsonNode = mapper.treeToValue(jsonNode, Root.class);


在这里,HTTP响应的主体是一个InputStream,首先使用ObjectMapper将其转换为JsonNode对象。readTree() . * 然后 *,使用ObjectMapper.treeToValue()将JsonNode转换为Root对象。Root类应该是一个POJO,它与您正在使用的JSON结构相匹配。如果没有,您可能会遇到更多的错误。

相关问题