由於這個麻煩,我掙扎了兩天,我無法得到它。我有:如何將集合中包含的對象映射到字段並反之亦然?推土機
public class ClientBo{
...
List<PersonBo> person;
...
}
和
public class ClientVo{
...
PersonVo person;
...
}
我需要做的就是配置莫名其妙推土機,這樣我就可以從PersonBo的列表映射到單場PersonVo(VO的博具有相同的字段名) 。
推土機的功能可以從集合轉換爲單個字段,而不是其他方式。 http://dozer.sourceforge.net/documentation/faq.html#mult-fields-to-single-field
,我想通了,唯一的解決辦法是:
<mapping type="one-way">
<class-a>...ClientBo</class-a>
<class-b>...ClientVo</class-b>
<field>
<a>person[0]</a>
<b>person</b>
</field>
</mapping>
<mapping type="one-way">
<class-a>...ClientVo</class-a>
<class-b>...ClientBo</class-b>
<field custom-converter="mapper.CustomObjectToList">
<a>person</a>
<b>person</b>
</field>
</mapping>
和
public class CustomObjectToList implements CustomConverter{
public Object convert(Object existingDestinationFieldValue, Object sourceFieldValue, Class<?> destinationClass, Class<?> sourceClass) {
if(sourceFieldValue==null)
return null;
if(sourceFieldValue instanceof List && ((List<?>) sourceFieldValue).size()>0){
/* This if is an attempt to get the first element of the
list and return it as a single field, but id doesn't work*/
Object o = ((List<?>)sourceFieldValue).get(0);
return o;
}else{
/*Here a single field is put in a List and returned*/
ArrayList<Object> result = new ArrayList<>();
result.add(sourceFieldValue);
return result;
}
}
}
有沒有什麼辦法讓我可以刪除
<mapping type="one-way">
<class-a>...ClientBo</class-a>
<class-b>...ClientVo</class-b>
<field>
<a>person[0]</a>
<b>person</b>
</field>
</mapping>
,並把工作做好由一個自定義轉換器?它應該儘可能通用,因此它可以適用於類似的環境。
謝謝!