xmlmapper new jacksonxmlelementwrapper java json jackson deserialization

java - new - xmlmapper jackson



Jackson Json y no hay tales errores de método (1)

Parece que el problema es que estás obteniendo versiones incompatibles de jackson-core y jackson-databind : jackson-core 2.0.5 está siendo instalado, pero creo que se requiere al menos 2.1.0.

La primera línea de la excepción le dice que no puede encontrar el método JsonParser.getValueAsString() , mirando los documentos API para 2.0.5 , ese método de hecho no existe. Parece que se agregó en 2.1.0 .

Por lo tanto, deberá corregir las dependencias, probablemente excluyendo 2.0.5 e incluyendo 2.1.0.

Estoy tratando de usar jackson para serializar y deserializar un POJO. Pasar de POJO a JSON funciona perfectamente pero ir en la otra dirección no.

Tengo un POJO

public class Event { private String kind; public String getKind() { return kind; } public void setKind(String kind) { this.kind = kind; } }

y para ejecutar y probar ejecuto el paquete 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);

Lanza la excepción

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)

He jugado con todo lo que puedo para hacer que el JSON funcione con POJO, pero no es así. Funciona si hago un mapa de JSON a un tipo de mapa.

Gracias por la ayuda

EDITAR

aquí hay un grep para jackson en mis dependencias

± > 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

Parece que no hay otra versión de jackson a excepción de jackson2.

El método completo que se ejecuta es un método de control de primavera.

@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; }