小编ger*_*ard的帖子

杰克逊:忽略空@XmlWrapperElement集合中的空格

使用Jackson和jackson-dataformat-xml 2.4.4,我试图反序列化一个XML文档,其中用@XmlWrapperElement注释的集合可能没有元素,但XML包含空格(在我的例子中是一个换行符).Jackson在此内容上抛出JsonMappingException,并显示消息"无法从VALUE_STRING标记中反序列化java.util.ArrayList的实例".我无法改变XML的生成方式.

例:

static class Outer {
    @XmlElementWrapper
    List<Inner> inners;
}

static class Inner {
    @XmlValue
    String foo;
}
ObjectMapper mapper = new XmlMapper().registerModules(new JaxbAnnotationModule());
String xml = "<outer><inners>\n</inners></outer>";
Outer outer = mapper.readValue(xml, Outer.class);
Run Code Online (Sandbox Code Playgroud)

以下变通办法不起作用:

  1. 启用DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY:在这种情况下,Jackson想要实例化Inner使用空格作为内容的虚假实例.
  2. 为String和集合类型创建此字段的setter.在这种情况下,我得到一个JsonMappingException("属性的冲突setter定义"inners"").
  3. 在一个类似的Stackoverflow问题中,建议将杰克逊降级到2.2.3.这不能解决我的问题.

有什么建议?

编辑:我可以通过包装CollectionDeserializer并检查空白标记来解决此问题.这看起来对我来说非常脆弱,例如我不得不重写另一个方法来重新包装对象.我可以发布解决方法,但更清洁的方法会更好.

java xml serialization jackson

4
推荐指数
1
解决办法
1416
查看次数

标签 统计

jackson ×1

java ×1

serialization ×1

xml ×1