使用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)
以下变通办法不起作用:
DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY:在这种情况下,Jackson想要实例化Inner使用空格作为内容的虚假实例.有什么建议?
编辑:我可以通过包装CollectionDeserializer并检查空白标记来解决此问题.这看起来对我来说非常脆弱,例如我不得不重写另一个方法来重新包装对象.我可以发布解决方法,但更清洁的方法会更好.