我有一个从DTO模型到JAXB生成的数据模型的映射,该数据模型充满了JAXBElement<>包装对象。
例如,有一个Person定义为(getters和setter被省略):
public class Person {
private JAXBElement<Name> name;
}
名称定义为:
public class Name {
private String value;
}
为了构造JAXBElement,我创建了一个ObjectFactory:
public class NameFactory extends ObjectFactory<JAXBElement<Name>> {
protected JAXBElement<Name> createObject(@Nonnull Class<?> context) {
// here, ObjectFactory is the JAXB generated ObjectFactory
return new ObjectFactory().createName();
}
}
在我的ConfigurableMapper中,我创建了一个从PersonDto到Person的类映射,如下所示:
factory.createClassMap(PersonDto.class, Person.class)
.field("name", "name.value.value")
.register;
使用此配置,PersonDto的映射没有名称(名称等于null)将导致Person元素具有名称成员,其值设置为null。通过显示执行类映射后生成的XML,可以更好地解释这一点:
<Person>
<Name>
<value></value>
</Name>
</Person>
在我的例子中,这个XML是无效的,当有一个Name元素时,它的值应该总是非null。因此,XML应该是:
<Person>
</Person>
是否可以阻止Orika构造Name对象,知道它的值将被设置为null?
答案 0 :(得分:0)
一天后以清醒的头脑再次浏览代码,事实证明Orika没有创建包装元素(正如我预期的那样)并且它完全是一个不同的问题......