最近我们面临自动生成映射代码的需求。
在分析了所有的bean映射框架之后,我们选择了Dozer框架(它的xml映射处理器真的很强大)。
但现在有一个问题。我们只需要在列表末尾添加一个元素(客户端)。但我真的不知道该怎么做。
public class Client {
private String name;
private Integer age;
// constructor, getters and setters
}
public class OrganizationSource{
private Client client;
// constructor, getter and setter
}
public class OrganizationDest {
private List<Client> clients;
// getter
}
Dozer's doc 中的所有示例仅说明按索引设置列表中的元素,当您不知道最后一个索引时,这不是合适的解决方案。
<field>
<a>client</a>
<b>clients[0]</b>
<b-hint>Client</b-hint> // that works! it creates new element in list
</field>
我试图为列表声明自定义设置方法(如何在文档中提到)
<field type="one-way">
<a>integerStr</a>
<b set-method="addIntegerToList">integerList</b>
</field>
但是要将元素放入列表中,我需要调用两种方法(首先是get,然后是add),例如:
Client source = new Client("Source", 0);
Organization org = new Organization();
List<Client> clients = org.getClients();
clients.add(source)
我试图以这样的方式声明 set 方法:
<field type="one-way>
<a>client</a>
<b set-method="getClients().add(java.lang.Object)"</b>
</field
但它不起作用。
我想知道 - 有没有办法在没有自定义转换器的情况下做到这一点?如果是的话 - 如何?