私は今この問題で2日から苦労しており、私はそれを手に入れることができません。私がする必要がどのようなコレクションに含まれるオブジェクトをフィールドとその逆にマップするにはどうすればよいですか? Dozer
public class ClientBo{
...
List<PersonBo> person;
...
}
と
public class ClientVo{
...
PersonVo person;
...
}
は何とかドーザを設定することですので、私は単一のフィールドPersonVoにPersonBo一覧からマッピングすることができます(Voのボーは、同じフィールド名を持つ):私が持っています。
Dozerには、コレクションから単一フィールドに変換するビルドイン機能がありますが、それ以外の方法はありません。 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>
を削除することができますし、仕事を得る方法はありますカスタムコンバータで?できるだけ汎用的でなければならないので、同様のコンテキストに収めることができます。
ありがとうございます!