com.fasterxml.jackson.databind.exc.Invalid

我在执行下面的代码时遇到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?


长风秋雁
浏览 125回答 1
1回答

翻阅古今

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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java