ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

android-在不使用批注的情况下使用Jackson JSON处理器

2019-10-10 03:35:59  阅读:13  来源: 互联网

标签:android json jackson



我有一个仅包含和xsd文件的软件包,用于生成(通过JAXB)与我们的服务器和客户端应用程序相关的共享类.因此,这些类包含XML批注.

一个客户端是一个Android应用程序.我还想在这里使用这些类进行JSON反序列化,因为我与提供JSON(使用Jersey / Jackson)的REST服务进行通信.

我尝试在Android上使用Jackson(版本1.7.2),如下所示:

ObjectMapper mapper = new ObjectMapper();
mapper = mapper.configure(DeserializationConfig.Feature.USE_ANNOTATIONS,
                false);
mapper = mapper.configure(SerializationConfig.Feature.USE_ANNOTATIONS,
                false);
FooBar someObject = (FooBar) mapper.readValue(jsonString, FooBar.class);

我虽然配置MAPPER应该避免使用注释,但是我仍然得到

02-07 09:30:18.631: ERROR/AndroidRuntime(447): java.lang.NoClassDefFoundError: javax.xml.bind.annotation.XmlAccessorType
02-07 09:30:18.631: ERROR/AndroidRuntime(447):     at java.lang.Class.getDeclaredAnnotations(Native Method)
02-07 09:30:18.631: ERROR/AndroidRuntime(447):     at org.codehaus.jackson.map.introspect.AnnotatedClass.resolveClassAnnotations(AnnotatedClass.java:292)
02-07 09:30:18.631: ERROR/AndroidRuntime(447):     at org.codehaus.jackson.map.introspect.AnnotatedClass.construct(AnnotatedClass.java:139)

谁知道阻止Jackson解析注释的诀窍.

谢谢
  克劳斯

解决方法:

我目前的调查得出以下结果:

使用DeserializationConfig.Feature.USE_ANNOTATIONS属性(设置为false)将使JACKSON DeserializerConfig类使用NopAnnotationIntrospector.然后,将使用此NopAnnotationIntrospector解析类的注释. NopAnnotationIntrospector将在对类的任何注释的每个isHandled请求上返回false-实际上,将不会在进一步处理中使用此注释.

因此-系统仍然“检查”注释-在这种情况下,注释必须位于类路径上.由于Android不提供任何jaxb-api注释,因此会导致NoClassDefFoundError.

我期望USE_ANNOTATIONS = false将使JACKSON完全忽略任何注释-但不幸的是,事实并非如此.现在,我将使用Jackson流媒体API来解析JSON字符串,而不是使用JACKSON数据绑定功能.



标签:android,json,jackson

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有