jaxb解组器:没有包装器的重复xmlelement b1 b2
由于所有的jaxb解组器:没有包装器的重复xmlelement b1 b2,jaxb,jackson,Jaxb,Jackson,由于所有的都不包含在包装器元素中,比如说当我使用JacksonXmlMapper将XML文件读取到我的pojojavabean类时,我遇到了异常 com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class com.xxxxx] from String value; no single-String constructor/factory met
都不包含在包装器元素中,比如说
当我使用JacksonXmlMapper
将XML文件读取到我的pojojavabean类时,我遇到了异常
com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class com.xxxxx] from String value; no single-String constructor/factory method (through reference chain: com.xxxx["xxx"]->com.xxx["xxx"])
我应该使用什么注释
@xmlement
公开名单b3;
杰克逊不知道如何将字符串转换为B3
的实例。将构造函数(或返回B3
的工厂方法)添加到B3
,该构造函数接受单个字符串。构造函数示例:
class B3 {
// ...
public B3(String value) {
// do something with value
}
// ...
}
如果要使用“展开”表示,则需要使用Jackson 2.1,并指示“展开”选项:
@JacksonXmlElementWrapper(useWrapping=false)
或者,如果使用JAXB注释,默认情况下不应使用包装
最后,您还可以将默认值更改为不使用包装器元素,包括:
JacksonXmlModule module = new JacksonXmlModule();
// to default to using "unwrapped" Lists:
module.setDefaultUseWrapper(false);
XmlMapper xmlMapper = new XmlMapper(module);
注意
Jackson不是一个兼容的实现。这意味着无法保证它如何解释标准JAXB注释
默认情况下,兼容实现不会将包装器元素应用于集合属性
A
默认情况下,JAXB(JSR-222)实现将基于属性默认映射。为了节省空间,我省略了这些方法,并指定了@xmlacessortype(xmlacesstype.FIELD)
,以便元数据将从实例变量(字段)派生
用于UM13097559的包;
导入java.util.List;
导入javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
公共A类{
专用字符串b1;
私有字符串b2;
私人名单b3;
}
B3
用于UM13097559的包;
导入javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
公共级B3{
私有字符串c1;
私有字符串c2;
}
演示
用于UM13097559的包;
导入java.io.File;
导入javax.xml.bind.*;
公开课演示{
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(A.class);
Unmarshaller Unmarshaller=jc.createUnmarshaller();
文件xml=新文件(“src/forum13097559/input.xml”);
A=(A)unmarshaller.unmarshal(xml);
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
元帅(a,系统输出);
}
}
input.xml/Output