我有这样的对象:
class User {
private String firstName;
private String secondName;
private int age;
....
get/set methods
}
Run Code Online (Sandbox Code Playgroud)
另一个对象将 User 作为属性:
class UserHolder {
private User user;
....
get/set methods
}
Run Code Online (Sandbox Code Playgroud)
我想将 UserHolder 转换为 User 使用MapStruct。
当我编写这个映射器时,我有这样的东西:
@Mapper(componentModel = "spring")
public interface UserHolderMapper {
@Mapping(source = "user.firstName", target = "firstName")
@Mapping(source = "user.secondName", target = "secondName")
@Mapping(source = "user.age", target = "age")
User toUser(UserHolder source);
}
Run Code Online (Sandbox Code Playgroud)
但它包含很多样板代码(在@Mapping注释中),我如何对映射器说我想将source.user映射到这个目标而不指定目标的字段?
blu*_*ker 13
我参加聚会可能会迟到。但是以下应该可以正常工作。
@Mapper(componentModel = "spring")
public interface UserHolderMapper {
@Mapping(source = "source.user", target = ".")
User toUser(UserHolder source);
}
Run Code Online (Sandbox Code Playgroud)
目前这是不可能的。已经有一个功能请求#1406,它与您需要的非常相似。
无论如何,作为解决方法,您的映射器可以如下所示:
@Mapper(componentModel = "spring")
public interface UserHolderMapper {
default User toUser(UserHolder source) {
return source == null ? null : toUser(source.getUser());
}
User toUser(UserDto source);
}
Run Code Online (Sandbox Code Playgroud)
我不知道里面的物体UserHolder是什么。UserDto只是一个假设,它可以是任何对象。
如果您不想公开,User toUser(UserDto source)那么您可以创建一个抽象映射器,并在那里使该方法受到保护和抽象。MapStruct 将能够处理它
| 归档时间: |
|
| 查看次数: |
10928 次 |
| 最近记录: |