如何解决ModelMapper 和映射优先级
我有这 2 个实体(Parent
和 Child
),还有 2 个 DTO(ParentDto
和 ChildDto
),我使用 lombok 注释来生成构造函数和吸气剂/吸气剂:
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Parent {
String id;
String uri;
Child child;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class ParentDto {
String id;
ChildDto child;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Child {
String id;
String uri;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class ChildDto {
String id;
}
我为 Parent.uri -> ParentDto.id
和 Child.uri -> ChildDto.id
创建了一个简单的映射。请注意映射的优先级,首先我添加了 Parent
,然后添加了 Child
映射。
final ModelMapper mm = new ModelMapper();
mm.addMappings(new PropertyMap<Parent,ParentDto>() {
@Override
protected void configure() {
map(source.getUri(),destination.getId());
}
});
mm.addMappings(new PropertyMap<Child,ChildDto>() {
@Override
protected void configure() {
map(source.getUri(),destination.getId());
}
});
最后我的 JUnit 测试:
var e = new Parent("666","res://",new Child("123","http://"));
var dto = mm.map(e,ParentDto.class);
Assert.assertEquals("res://",dto.getId());
Assert.assertEquals("http://",dto.getChild().getId()); // THIS ASSERTION FAILS!
为了解决这个问题,我改变了映射优先级,首先映射 Child
和 Parent
。
我的问题是:
- 为什么 ModelMapper 考虑映射优先级?这是默认行为?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。