简体   繁体   English

使用带有Joda Datetime的Jackson库反序列化Json对象

[英]Deserialize Json object using Jackson library with Joda Datetime

I'm trying to use the Jackson library to deserialize a Json object and i'm having some trouble in the Joda Datetime format deserialization. 我正在尝试使用Jackson库对Json对象进行反序列化,而在Joda Datetime格式反序列化方面遇到了一些麻烦。

This code throws the following error: 此代码引发以下错误:

Unable to resolve Lorg/joda/time/base/AbstractInstant; 无法解析Lorg / joda / time / base / AbstractInstant; annotation class 1557 注释类1557

DataWrapper list = mapper.readValue(response, DataWrapper.class);

I already try to find something about this but nothing. 我已经尝试找到与此有关的东西,但一无所获。

There is the complete code: 有完整的代码:

public class DataWrapper {
    public List<ScheduleEntry> data;
}

public static class ScheduleEntry {
    public long ID;
public DateTime StartDate;
public DateTime EndDate;
public String Description;
}

WebService callWebService = new WebService(SERVICE_URI);        
String response = callWebService.webInvoke("/GetScheduleEntrys", params);

ObjectMapper mapper = new ObjectMapper();

try
{    
    DataWrapper list = mapper.readValue(response, DataWrapper.class);

    List<ScheduleEntry> items = list.data;
}

WebService: 网络服务:

[OperationContract]
[WebInvoke(Method = "POST",
   UriTemplate = "GetScheduleEntrys",
   BodyStyle = WebMessageBodyStyle.WrappedRequest,
   ResponseFormat = WebMessageFormat.Json,
   RequestFormat = WebMessageFormat.Json)]
List<ScheduleEntry> GetScheduleEntrys(string Token);

JSON: JSON:

[{"Description":"Cliente José","EndDate":"/Date(1353319200000+0000)/","ID":0,"StartDate":"/Date(1353315600000+0000)/"},{"Description":"Cliente Carlos","EndDate":"/Date(1353348000000+0000)/","ID":0,"StartDate":"/Date(1353344400000+0000)/"},{"Description":"Cliente Pedro","EndDate":"/Date(1353513600000+0000)/","ID":0,"StartDate":"/Date(1353510000000+0000)/"},{"Description":"Cliente Marco","EndDate":"/Date(1353664800000+0000)/","ID":0,"StartDate":"/Date(1353661200000+0000)/"},{"Description":"Cliente José","EndDate":"/Date(1353319200000+0000)/","ID":0,"StartDate":"/Date(1353315600000+0000)/"},{"Description":"Cliente Carlos","EndDate":"/Date(1353348000000+0000)/","ID":0,"StartDate":"/Date(1353344400000+0000)/"},{"Description":"Cliente Pedro","EndDate":"/Date(1353513600000+0000)/","ID":0,"StartDate":"/Date(1353510000000+0000)/"},{"Description":"Cliente Marco","EndDate":"/Date(1353664800000+0000)/","ID":0,"StartDate":"/Date(1353661200000+0000)/"}] [{“ Description”:“ ClienteJosé”,“ EndDate”:“ / Date(1353319200000 + 0000)/”,“ ID”:0,“ StartDate”:“ / Date(1353315600000 + 0000)/”},{“描述“:”客户卡洛斯“,”结束日期“:” /日期(1353348000000 + 0000)/“,” ID“:0,”开始日期“:” /日期(1353344400000 + 0000)/“},{”描述“: “ Cliente Pedro”,“ EndDate”:“ /日期(1353513600000 + 0000)/”,“ ID”:0,“ StartDate”:“ / Date(1353510000000 + 0000)/”},{“ Description”:“ Cliente Marco “,” EndDate“:” /日期(1353664800000 + 0000)/“,” ID“:0,” StartDate“:” /日期(1353661200000 + 0000)/“},{” Description“:” ClienteJosé“,” EndDate“:” / Date(1353319200000 + 0000)/“,” ID“:0,” StartDate“:” / Date(1353315600000 + 0000)/“},{” Description“:” Cliente Carlos“,” EndDate“: “ / Date(1353348000000 + 0000)/”,“ ID”:0,“ StartDate”:“ / Date(1353344400000 + 0000)/”},{“ Description”:“ Cliente Pedro”,“ EndDate”:“ / Date (1353513600000 + 0000)/“,” ID“:0,” StartDate“:” /日期(1353510000000 + 0000)/“},{” Description“:” Cliente Marco“,” EndDate“:” / Date(1353664800000+ 0000)/“,” ID“:0,” StartDate“:” / Date(1353661200000 + 0000)/“}]

Full log 完整日志

01-03 17:39:24.700: E/dalvikvm(18494): Unable to resolve Lorg/joda/time/base/AbstractInstant; 01-03 17:39:24.700:E / dalvikvm(18494):无法解析Lorg / joda / time / base / AbstractInstant; annotation class 1557 01-03 17:39:28.505: W/dalvikvm(18494): threadid=11: thread exiting with uncaught exception (group=0x40c4d1f8) 01-03 17:39:28.650: E/AndroidRuntime(18494): FATAL EXCEPTION: AsyncTask #1 01-03 17:39:28.650: E/AndroidRuntime(18494): java.lang.RuntimeException: An error occured while executing doInBackground() 01-03 17:39:28.650: E/AndroidRuntime(18494): at android.os.AsyncTask$3.done(AsyncTask.java:278) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor 注释类1557 01-03 17:39:28.505:W / dalvikvm(18494):threadid = 11:线程以未捕获的异常退出(group = 0x40c4d1f8)01-03 17:39:28.650:E / AndroidRuntime(18494):FATAL例外:AsyncTask#1 01-03 17:39:28.650:E / AndroidRuntime(18494):java.lang.RuntimeException:执行doInBackground()01-03 17:39:28.650时发生错误:E / AndroidRuntime(18494) :在android.os.AsyncTask $ 3.done(AsyncTask.java:278)01-03 17:39:28.650:E / AndroidRuntime(18494):在java.util.concurrent.FutureTask $ Sync.innerSetException(FutureTask.java: 273)01-03 17:39:28.650:E / AndroidRuntime(18494):at java.util.concurrent.FutureTask.setException(FutureTask.java:124)01-03 17:39:28.650:E / AndroidRuntime(18494) :位于java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:307)01-03 17:39:28.650:E / AndroidRuntime(18494):位于java.util.concurrent.FutureTask.run(FutureTask.java :137)01-03 17:39:28.650:E / AndroidRuntime(18494):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor .java:1076) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.lang.Thread.run(Thread.java:856) 01-03 17:39:28.650: E/AndroidRuntime(18494): Caused by: java.lang.NoClassDefFoundError: org/joda/convert/ToString 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.lang.reflect.Method.getDeclaredAnnotations(Native Method) 01-03 17:39:28.650: E/AndroidRuntime(18494): at java.lang.reflect.Method.getDeclaredAnnotations(Method.java:267) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.AnnotatedClass._addMixUnders(AnnotatedClass.java:999) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.AnnotatedClass._addMemberMethods(AnnotatedClass.java:610) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.AnnotatedClass.resolveMemberMethods(AnnotatedClass.jav .java:1076)01-03 17:39:28.650:E / AndroidRuntime(18494):at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:569)01-03 17:39:28.650:E / AndroidRuntime(18494):位于java.lang.Thread.run(Thread.java:856)01-03 17:39:28.650:E / AndroidRuntime(18494):原因:java.lang.NoClassDefFoundError:org / joda / convert / ToString 01-03 17:39:28.650:E / AndroidRuntime(18494):at java.lang.reflect.Method.getDeclaredAnnotations(本机方法)01-03 17:39:28.650:E / AndroidRuntime(18494):at java.lang.reflect.Method.getDeclaredAnnotations(Method.java:267)01-03 17:39:28.650:E / AndroidRuntime(18494):at com.fasterxml.jackson.databind.introspect.AnnotatedClass._addMixUnders(AnnotatedClass.java :999)01-03 17:39:28.650:E / AndroidRuntime(18494):位于com.fasterxml.jackson.databind.introspect.AnnotatedClass._addMemberMethods(AnnotatedClass.java:610)01-03 17:39:28.650:E / AndroidRuntime(18494):位于com.fasterxml.jackson.databind.introspect.AnnotatedClass.resolveMemberMethods(AnnotatedClass.jav a:421) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.AnnotatedClass.memberMethods(AnnotatedClass.java:243) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._addMethods(POJOPropertiesCollector.java:442) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.collect(POJOPropertiesCollector.java:232) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.collectProperties(BasicClassIntrospector.java:142) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.forDeserialization(BasicClassIntrospector.java:81) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.forDeserialization(BasicClassIntrospector.java:11) 01-03 17:39:28.650: E/AndroidRuntime(1849 a:421)01-03 17:39:28.650:E / AndroidRuntime(18494):位于com.fasterxml.jackson.databind.introspect.AnnotatedClass.memberMethods(AnnotatedClass.java:243)01-03 17:39:28.650: E / AndroidRuntime(18494):在com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._addMethods(POJOPropertiesCollector.java:442)01-03 17:39:28.650:E / AndroidRuntime(18494):在com.fasterxml.jackson .databind.introspect.POJOPropertiesCollector.collect(POJOPropertiesCollector.java:232)01-03 17:39:28.650:E / AndroidRuntime(18494):at com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.collectProperties(BasicClassIntrospector.java: 142)01-03 17:39:28.650:E / AndroidRuntime(18494):位于com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.forDeserialization(BasicClassIntrospector.java:81)01-03 17:39:28.650:E / AndroidRuntime(18494):位于com.fasterxml.jackson.databind.introspect.BasicClassIntrospector.forDeserialization(BasicClassIntrospector.java:11)​​01-03 17:39:28.650:E / AndroidRuntime(1849) 4): at com.fasterxml.jackson.databind.DeserializationConfig.introspect(DeserializationConfig.java:507) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:326) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:143) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:325) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeser 4):位于com.fasterxml.jackson.databind.DeserializationConfig.introspect(DeserializationConfig.java:507)01-03 17:39:28.650:E / AndroidRuntime(18494):位于com.fasterxml.jackson.databind.deser.DeserializerCache ._createDeserializer(DeserializerCache.java:326)01-03 17:39:28.650:E / AndroidRuntime(18494):at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)01-03 17 :39:28.650:E / AndroidRuntime(18494):在com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)01-03 17:39:28.650:E / AndroidRuntime(18494):在com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:143)01-03 17:39:28.650:E / AndroidRuntime(18494):at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(Deserialization) .java:325)01-03 17:39:28.650:E / AndroidRuntime(18494):位于com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeser ializer(StdDeserializer.java:633) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:427) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:295) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:143) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:325) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:147) 01-03 17:39:28.650: E/Andro ializer(StdDeserializer.java:633)01-03 17:39:28.650:E / AndroidRuntime(18494):at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:427)01-03 17: 39:28.650:E / AndroidRuntime(18494):在com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:295)01-03 17:39:28.650:E / AndroidRuntime(18494):在com .fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)01-03 17:39:28.650:E / AndroidRuntime(18494):at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer( DeserializerCache.java:143)01-03 17:39:28.650:E / AndroidRuntime(18494):at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:325)01-03 17:39:28.650: E / AndroidRuntime(18494):位于com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:147)01-03 17:39:28.650:E / Andro idRuntime(18494): at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:23) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:329) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:633) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:427) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:295) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244) 01-03 17:39:28.650: E/AndroidRuntime(18494): at com.fasterxml.jackson.databind.deser.Deseriali idRuntime(18494):位于com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:23)01-03 17:39:28.650:E / AndroidRuntime(18494):位于com.fasterxml.jackson .databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:329)01-03 17:39:28.650:E / AndroidRuntime(18494):at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java: 633)01-03 17:39:28.650:E / AndroidRuntime(18494):位于com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:427)01-03 17:39:28.650:E / AndroidRuntime(18494):位于com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:295)01-03 17:39:28.650:E / AndroidRuntime(18494):位于com.fasterxml.jackson.databind .deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)01-03 17:39:28.650:E / AndroidRuntime(18494):at com.fasterxml.jackson.databind.deser.Deseriali zerCache.findValueDeserializer(Deserialize zerCache.findValueDeserializer(反序列化

Exception would indicate that you are using incompatible Joda version (most likely an older version). 异常表明您使用的是不兼容的Joda版本(很可能是较旧的版本)。

But looking at JSON, your date values are being serialized using some non-standard notation, so you will probably need to write custom handlers as well (or change serialization format). 但是看看JSON,您的日期值正在使用一些非标准的符号进行序列化,因此您可能还需要编写自定义处理程序(或更改序列化格式)。

Given the JSON you have, you need to have this statement in your mapper. 给定您拥有的JSON,您需要在映射器中包含此语句。 DataWrapper.setData(mapper.readValue(response, new TypeReference<List<ScheduleEntry>>() { }));

This will not resolve the original issue that you are facing: Unable to resolve Lorg/joda/time/base/AbstractInstant; annotation class 1557 这不能解决您面临的原始问题: Unable to resolve Lorg/joda/time/base/AbstractInstant; annotation class 1557 Unable to resolve Lorg/joda/time/base/AbstractInstant; annotation class 1557

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM