Jackson Json并没有这样的方法错误
我正在尝试使用杰克逊对POJO进行序列化和反序列化。从POJO到JSON可以完美地工作,而从另一个方向去则不行。
我有一个POJO
public class Event { private String kind;
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
}
并运行和测试我运行了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);
引发异常
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)
我已经尽力将JSON转换为POJO了,但是没有。如果我从JSON映射到Map类型,它确实可以工作。
谢谢您的帮助
回答:
这是我依赖中的杰克逊的grep
± > 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
看起来除了jackson2之外,没有其他版本的jackson。
运行的完整方法是弹簧控制器方法。
@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;
}
回答:
看来问题是您正在获得与jackson-core
和的不兼容版本jackson-databind
-引入了jackson-core
2.0.5,但我认为至少需要2.1.0。
异常的第一行告诉您无法找到该方法JsonParser.getValueAsString()
,请查看2.0.5的API文档,该方法确实不存在。看起来它是在2.1.0中添加的。
因此,您需要修复相关性-最有可能通过排除2.0.5和包括2.1.0来解决。
以上是 Jackson Json并没有这样的方法错误 的全部内容, 来源链接: utcz.com/qa/412397.html