Estoy recibiendo com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No value type configured for ObjectReader
un problema durante la ejecución de código a continuación
Jackson es la versión jackson-databind-2.9.9.jar
public <T> T parsingData(String body) {
try {
return getObjectMapper().reader().readValue(body);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
A continuación Excepción exacta me estoy poniendo en printStackTrace
y puedo encontrar el String body
que se expone en la excepción.
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]
Actualizado: ¿Me podría explicar por qué estoy recibiendo esta excepción? Se debe esto a que no he proporcionar Class
o TypeReference
?
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Tipo de valor configurado para ObjectReader
Medios, Jackson
no sabe qué tipo que le gustaría a deserialise. No funciona debido a Tipo Erasure en Java .
Que funcionará cuando se enlaza a una clase:
public static <T> T parsingData(String body) throws IOException {
return new ObjectMapper().readerFor(A.class).readValue(body);
}
O con Class
param:
public static <T> T parsingData(String body, Class<T> clazz) throws IOException {
return new ObjectMapper().readerFor(clazz).readValue(body);
}
Véase la pregunta similar para readValue
el método y la forma en que podría resolverse: ¿Cómo parametrizar el análisis de respuesta en Java?
Para entender readValue
mehtod tenemos que echar un vistazo a la documentación :
Método de que el contenido se une lee de cadena JSON dado, utilizando la configuración de este lector. Valor de retorno es o bien de nueva construcción, o el valor de la raíz que se especificó con withValueToUpdate (Objeto).
pero en su código que utilizó lector pura sin ninguna configuración.
Si no conoce a un tipo que acaba de deserialise JSON
a JsonNode
que es probablemente la manera más genérica:
JsonNode root = new ObjectMapper().readTree(json);