我有一个树状的实体结构,我正在尝试使用 ModelMapper 将其映射到 DTO。诀窍是我试图在第一个父母之后打破图表。
以下是我正在尝试做的一个例子。我有一个具有名称和父类别的类别实体。我希望我的 DTO 有一个指向它的父级的链接,但不希望后者有它自己的父级(这样我就不会得到整个层次结构)
问题是 ModelMapper 没有映射我的 DTO 的父级,因为它的类型不同;我将它声明为 DTO 而不是 CategoryDTO 以中断递归。如果我确实将我的父母声明为 CategoryDTO,则映射工作正常,但我会得到我所有的父母和祖父母(我不想要)。
任何人都知道我该如何解决这个问题?
import java.util.UUID;
import org.junit.Assert;
import org.junit.Test;
import org.modelmapper.ModelMapper;
public class CategoryTest {
public static class Category {
private String uid = UUID.randomUUID().toString();
private String name;
private Category parent;
public Category () {}
public Category(String name, Category parent) {
this.name = name;
this.parent = parent;
}
public String getUid() {return uid;}
public void setUid(String uid) {this.uid = uid;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public Category getParent() {return parent;}
public void setParent(Category parent) {this.parent = parent;}
}
public static class DTO {
private String uid;
private String name;
public String getUid() {return uid;}
public void setUid(String uid) {this.uid = uid;}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}
public static class CategoryDTO extends DTO {
private DTO parent;
public DTO getParent() {return parent;}
public void setParent(DTO parent) {this.parent = parent;}
}
@Test
public void simpleTest() {
Category dto = new Category("Test1",null);
CategoryDTO entity = new ModelMapper().map(dto, CategoryDTO.class);
Assert.assertEquals("Test1", entity.getName());
Assert.assertEquals(dto.getUid(), entity.getUid());
}
@Test
public void withParentTest() {
Category dto = new Category("child",new Category("root", null));
CategoryDTO entity = new ModelMapper().map(dto, CategoryDTO.class);
Assert.assertEquals("child", entity.getName());
Assert.assertEquals(dto.getUid(), entity.getUid());
Assert.assertNotNull(entity.getParent());
}
}