java - com.fasterxml.jackson.databind.exc.InvalidDefinitionException:没有为 ObjectReader 配置值类型
问题描述
我com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No value type configured for ObjectReader
在执行以下代码时遇到问题
杰克逊版本是jackson-databind-2.9.9.jar
public <T> T parsingData(String body) {
try {
return getObjectMapper().reader().readValue(body);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
在我进入的确切异常下方printStackTrace
,可以找到String body
异常中暴露的内容。
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No value type configured for ObjectReader
at [Source: (String)"{
"timestamp": "2019-06-04T09:36:50.086+02:00",
"path": "/api/check/85358/checking/246syb-f3f2-4756-91da-dae3e8ce774b/test/22462da-c4e2-45ca-bd27-246/rows/8bc3965a-ae22-4d7f-b770-262sgs24/port",
"status": 400,
"error": "Internal Server Error",
"message": "[owner.firstName2:size:1:30, owner.lastName2:size:1:30]",
"errorCode": 200000
}
"; line: 1, column: 1]
更新:你能解释一下为什么我会收到这个例外吗?这是因为我没有提供Class
还是TypeReference
?
解决方案
com.fasterxml.jackson.databind.exc.InvalidDefinitionException:没有为 ObjectReader 配置值类型
意思是,Jackson
不知道你想反序列化到哪种类型。由于Java 中的类型擦除,它不起作用。
当你绑定一个类时它会起作用:
public static <T> T parsingData(String body) throws IOException {
return new ObjectMapper().readerFor(A.class).readValue(body);
}
或使用Class
参数:
public static <T> T parsingData(String body, Class<T> clazz) throws IOException {
return new ObjectMapper().readerFor(clazz).readValue(body);
}
请参阅类似的readValue
方法问题以及如何解决它:如何在 Java 中参数化响应解析?
要了解readValue
方法,我们需要查看文档:
使用此阅读器的配置绑定从给定 JSON 字符串读取的内容的方法。返回值要么是新构造的,要么是使用 withValueToUpdate(Object) 指定的根值。
但是在您的代码中,您使用了没有任何配置的纯阅读器。
如果您不知道一种类型,只需反序列JSON
化JsonNode
这可能是最通用的方式:
JsonNode root = new ObjectMapper().readTree(json);
推荐阅读
- php - 使用ajax jquery在html中对db中的相同数据进行分组
- powershell - ssh 无法解析主机名(在 WSL 上工作,但不在 CMD 或 Powershell 上)
- reactjs - 是否有任何工具可以在较少的文件中强制 css 类的命名约定?
- node.js - 找不到模块“express”-docker-compose nodejs 服务
- visual-studio-code - VScode 终端中不需要的输出
- python - 以列表为参数并附加值和函数返回的 Python 函数
- python - 通过 Python 执行 Oracle 过程的问题
- php - 在 PHP 中将数据写入 TCP Socket
- ssl - 如何从自签名根证书创建中间证书?
- mysql - MySQL 的 DDL 中的 KEY 是什么意思?