简体   繁体   中英

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.

This code throws the following error:

Unable to resolve Lorg/joda/time/base/AbstractInstant; annotation class 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:

[{"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)/"}]

Full log

01-03 17:39:24.700: E/dalvikvm(18494): Unable to resolve 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 .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 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 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 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 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 zerCache.findValueDeserializer(Deserialize

Exception would indicate that you are using incompatible Joda version (most likely an older version).

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).

Given the JSON you have, you need to have this statement in your mapper. 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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