我需要使用Dozer初始化目标对象上的String属性,并使用空字符串。
想象一下这些对象:
SRC
public class Container {
private String animalName;
....
DEST
public class Animal {
private String name;
private String type;
我需要从Container初始化为Animal并将类型属性设置为“”而不是null:
我找到的唯一方法是按如下方式编写自定义转换器:
public class InitializeStringConverter extends DozerConverter<Container, String>{
public InitializeStringConverter() {
super(Container.class, String.class);
}
@Override
public Container convertFrom(String arg0, Container arg1) {
return null;
}
@Override
public String convertTo(Container arg0, String arg1) {
return "";
}
}
并具有此映射:
<mapping>
<class-a>it.alten.sample.mapping.Container</class-a>
<class-b>it.alten.sample.mapping.Animal</class-b>
<field custom-converter="it.alten.sample.mapping.converter.InitializeStringConverter">
<a>this</a>
<b>type</b>
</field>
<!--
<field>
<a>animalName</a>
<b>name</b>
</field>
-->
<field>
<a>animalType</a>
<b>type</b>
</field>
</mapping>
有没有更简洁的方法来完成这项任务?
亲切的问候 马西莫
答案 0 :(得分:1)
Dozer复制并转换值,它不应该像我想的那样以自定义方式初始化字段。
我的问题解决方案:
创建setter,其init字段为空值而不是null,如:
void setType(String type) {this.type = (type != null ? type : "");}
我认为,对于你的问题来说,这是更明确的解决方案,因为空控制是setter的功能,而且是正确的。