为了账号安全,请及时绑定邮箱和手机立即绑定

com.fasterxml.jackson.databind.exc.Invalid

com.fasterxml.jackson.databind.exc.Invalid

长风秋雁 2023-07-28 16:56:37
我在执行下面的代码时遇到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) 指定的根值。

但在您的代码中您使用了纯阅读器,没有任何配置。

如果您不知道类型,只需反序列化JSONJsonNode这可能是最通用的方法:

JsonNode root = new ObjectMapper().readTree(json);


查看完整回答
反对 回复 2023-07-28
  • 1 回答
  • 0 关注
  • 86 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信