Jackson Json und keine solchen Methodenfehler
Ich bin versucht, jackson zu serialisieren und Deserialisieren von POJO. Gehen von POJO zu JSON funktioniert perfekt, aber geht die andere Richtung nicht.
Habe ich ein POJO
public class Event {
private String kind;
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
}
und ausführen und testen ich führen Sie den Paket-Kalender.Modell;
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);
Wirft Ausnahme
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)
Spielte ich mit über alles, was ich kann, um die JSON zu POJO zu arbeiten, aber es wird nicht. Es funktioniert, wenn ich das Mapping von JSON zu einer Karte geben.
Danke für die Hilfe
BEARBEITEN
hier ist ein grep für jackson, in meinen Abhängigkeiten
± > 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
Sieht es aus wie es gibt keine andere version von jackson außer für jackson2.
Die vollständige Methode, die ausgeführt wird, eine Feder controller-Methode.
@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;
}
InformationsquelleAutor der Frage austinbv | 2013-02-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie es aussieht, das problem ist, dass Sie immer die inkompatible Versionen von
jackson-core
undjackson-databind
- jackson-core-2.0.5 gezogen wird, aber ich glaube, zumindest 2.1.0 ist erforderlich.Die erste Zeile die exception sagt dir, dass es nicht finden können, die Methode
JsonParser.getValueAsString()
Blick auf die API docs für 2.0.5dass die Methode tatsächlich nicht existiert. Es sieht aus wie es wurde Hinzugefügt, in 2.1.0.So, müssen Sie zu beheben, die Abhängigkeiten, die - wahrscheinlich durch den Ausschluss 2.0.5 einschließlich 2.1.0.
InformationsquelleAutor der Antwort Spencer Uresk