我有一个从DTO模型到JAXB生成的数据模型的映射,该模型充满了JAXBElement<>包装器对象。
例如,有一个类 Person 定义为 (省略了 getter 和 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 的映射将导致 Person 元素具有其值设置为 null 的名称成员。通过显示执行类映射后生成的 XML,可以更好地解释这一点:
<Person>
<Name>
<value></value>
</Name>
</Person>
就我而言,此XML无效,当存在Name元素时,其值应始终为非null。因此,XML 应为:
<Person>
</Person>
是否可以阻止 Orika 构造 Name 对象,知道其值将设置为 null?
一天后,以清晰的头脑再次浏览代码,结果发现 Orika 没有创建包装元素(正如我预期的那样),这是一个完全不同的问题......