J'essaie d'utiliser Jackson pour sérialiser et désérialiser un POJO. Aller de POJO à JSON fonctionne à la perfection, mais inversement.
J'ai un POJO
public class Event {
private String kind;
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
}
et pour exécuter et tester, je lance le package calendar.model;
Event event = new Event();
event.setKind("This is a kind");
String json = objectMapper.writeValueAsString(event);
// RETURNS: "{\"kind\":\"This is a kind\"}"
objectMapper.readValue(json, Event.class);
Lancers Exception
Java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonParser.getValueAsString()Ljava/lang/String;
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.Java:24)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.Java:11)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.Java:375)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.Java:98)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.Java:308)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.Java:121)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.Java:2796)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.Java:1942)
at calendar.controller.RootController.details(RootController.Java:59)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:39)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:25)
at Java.lang.reflect.Method.invoke(Method.Java:597)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.Java:219)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.Java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.Java:100)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.Java:604)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.Java:565)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.Java:80)
J'ai joué avec à peu près tout pour que le JSON de POJO fonctionne, mais ce ne sera pas le cas. Cela fonctionne si je mappe de JSON à un type de carte.
Merci pour l'aide
voici un grep pour jackson dans mes dépendances
± > mvn dependency:tree | grep jackson -I-
[INFO] +- com.google.http-client:google-http-client-jackson2:jar:1.13.1-beta:compile
[INFO] | \- com.fasterxml.jackson.core:jackson-core:jar:2.0.5:compile
[INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.1.1:compile
[INFO] | | +- com.fasterxml.jackson.dataformat:jackson-dataformat-xml:jar:2.1.1:compile
[INFO] | | | +- com.fasterxml.jackson.core:jackson-databind:jar:2.1.1:compile
[INFO] | | | +- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.1.0:compile
Il semble qu'il n'y ait pas d'autre version de jackson à l'exception de jackson2.
La méthode complète en cours d’exécution est une méthode de contrôleur à ressort.
@RequestMapping(value = "/")
public Event root() throws IOException {
Event event = new Event();
event.setKind("This is a kind");
String json = objectMapper.writeValueAsString(event);
// RETURNS: "{\"kind\":\"This is a kind\"}"
Event mapped = objectMapper.readValue(json, Event.class);
return mapped;
}
Il semble que le problème soit que vous obteniez des versions incompatibles de jackson-core
Et de jackson-databind
- jackson-core 2.0.5 est en cours d'installation, mais je pense qu'au moins la version 2.1.0 est requise.
La première ligne de l'exception vous indique qu'il ne trouve pas la méthode JsonParser.getValueAsString()
, en consultant la documentation de l'API pour 2.0.5 , cette méthode n'existe en effet pas. On dirait qu'il a été ajouté dans 2.1. .
Donc, vous aurez besoin de réparer les dépendances - très probablement en excluant les versions 2.0.5 et 2.1.0.