gpt4 book ai didi

java - 使用 Dozer 转换嵌套集合

转载 作者:搜寻专家 更新时间:2023-11-01 02:52:04 27 4
gpt4 key购买 nike

我有一个类 A,它有一组嵌套的类 B:

public class A {
private Set<B> children;
}

public class B {
private int value;
}

我还有一个 C 类,它有一组嵌套的 D 类:

public class C {
private Set<D> children;
}

public class D {
private int value;
}

现在给定一个 A 列表,我如何将它转换为 C 列表?理想情况下,我不必提供任何映射提示,因为我使用的是泛型。例如:

List<A> src = new ArrayList<A>();
// ----- Add some A's to src -----
List<C> dst = mapper.map(src, List<C>.class);

显然,最后一行的语法不正确。应该是什么?另外,我如何告诉 Dozer 要创建什么类型的列表或集合?

谢谢。

纳什

最佳答案

这实际上在他们的常见问题解答中得到了回答,但由于某种原因一直在高级部分中。我不认为这是一个高级话题,我认为这是一件很平常的事情。 You do it with a collection hint.

When mapping collections, how do I tell Dozer what type of data objects I want in the destination collection?

Hints are supported tohandle this use case. Hints are not required if you are using JDK 1.5Generics because the types can be auto detected by Dozer. But if youare not using generics, to convert a Collection/Array to aCollection/Array with different type objects you can specify a Hint tolet Dozer know what type of objects you want created in thedestination list. If a Hint is not specified for the destinationfield, then the destination Collection will be populated with objectsthat are the same type as the elements in the src Collection.

<field>
<a>someList</a>
<b>otherList</b>
<b-hint>org.dozer.vo.TheFirstSubClassPrime</b-hint>
</field>

该答案向您展示了如何在 xml 中执行此操作。以下是使用映射在 Java 代码中执行此操作的方法:

import org.dozer.loader.api.BeanMappingBuilder;

import static org.dozer.loader.api.FieldsMappingOptions.hintB;

public class Mapping extends BeanMappingBuilder {
@Override
protected void configure() {
mapping(Subject.class, JsonSubject.class)
.fields("names", "names", hintB(JsonName.class));
}
}

提示告诉推土机,“这个 A 列表应该转换为列表 JsonName 实例”。以下是将此映射添加到映射器的方法:

    mapper = new DozerBeanMapper();
mapper.addMapping(new Mapping());

关于java - 使用 Dozer 转换嵌套集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9318488/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com