我在xml中有如下客户列表
<products>
<product>
<name>product1</name>
<id>c123</id>
<customer>
<name>customer1</name>
<id>c1</id>
<dob>10/10/23</dob>
....
</customer>
<customer>
<name>customer2</name>
<id>c2</id>
<dob>10/10/23</dob>
....
</customer>
</product>
<product>
<name>product2</name>
<id>c123</id>
<customer>
<name>customer3</name>
<id>c3</id>
<dob>10/10/23</dob>
....
</customer>
<customer>
<name>customer4</name>
<id>c4</id>
<dob>10/10/23</dob>
....
</customer>
</product>
</products>
要对此进行映射,我有一个自定义对象
public class Product {
private String name;
private String id;
@XmlJavaTypeAdapter (CustomerAdapter.class)
@XmlElement(name="customer")
private Map<String, Customer> customerMap;
setter()/getter()
}
public class Customer {
private String name;
private String id;
private String dob;
setter()/getter()
}
我需要将其转换为键,其中id是id,Customer作为值的映射,这样从映射中获取客户详细信息比从列表中获取更好。为了进行转换,我写了一个适配器
public class CustomerAdapter extends XmlAdapter<Customer, Map<String, Customer>> {
Map<String, Customer> customerMap = new HashMap<> ( );
@Override
public Map<String, Customer> unmarshal(Customer customer) {
if (null != customer) {
tagMap.put (customer.getId ( ), customer);
}
return customerMap ;
}
@Override
public PublicationTagDto marshal(Map<String, Customer> customerMap) {
return customerMap.values ().iterator ().next ();
}
}
这里的问题是,我正在获取所有产品的所有客户的列表。基本上对于product1我正在获取所有客户1 2 3 4的列表。类似地,对于product 2我正在获取所有树客户1 2 3 4的列表。我需要它product1客户1 2,product 2客户3 4,基本上需要为每个人对象启动CustomerAdapter。这里的问题是CustomerAdapter被初始化一次,我需要为每个产品对象进行初始化。
请在这里帮助。