我在执行下面的代码时遇到com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No value type configured for ObjectReader问题杰克逊版本是jackson-databind-2.9.9.jarpublic <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 ObjectReaderat [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?
1 回答
翻阅古今
TA贡献1780条经验 获得超5个赞
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
方法,我们需要查看文档:
使用此读取器的配置绑定从给定 JSON 字符串读取的内容的方法。返回值要么是新构造的,要么是使用 withValueToUpdate(Object) 指定的根值。
但在您的代码中您使用了纯阅读器,没有任何配置。
如果您不知道类型,只需反序列化JSON
到JsonNode
这可能是最通用的方法:
JsonNode root = new ObjectMapper().readTree(json);
添加回答
举报
0/150
提交
取消