目标是内联对象时如何使用Mapstruct?
How to use Mapstruct when target is inline object?
我有这样的对象:
class User {
private String firstName;
private String secondName;
private int age;
....
get/set methods
}
另一个对象有用户作为 属性:
class UserHolder {
private User user;
....
get/set methods
}
我想将 UserHolder 转换为用户使用 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);
}
但它包含很多样板代码(在@Mapping 注释中),我怎么能告诉映射器我想映射 source.user 到 这个目标没有指定目标的字段?
这目前是不可能的。已经有一个功能请求 #1406 与您的需求非常相似。
在任何情况下,作为一种变通方法,您的映射器可能如下所示:
@Mapper(componentModel = "spring")
public interface UserHolderMapper {
default User toUser(UserHolder source) {
return source == null ? null : toUser(source.getUser());
}
User toUser(UserDto source);
}
我不知道UserHolder
中的对象是什么。 UserDto
只是一个推定,可以是任何对象。
如果您不想公开 User toUser(UserDto source)
那么您可以创建一个抽象映射器并使该方法在那里受到保护和抽象。 MapStruct 将能够处理它
我可能会迟到。但是以下应该可以正常工作。
@Mapper(componentModel = "spring")
public interface UserHolderMapper {
@Mapping(source = "source.user", target = ".")
User toUser(UserHolder source);
}
我有这样的对象:
class User {
private String firstName;
private String secondName;
private int age;
....
get/set methods
}
另一个对象有用户作为 属性:
class UserHolder {
private User user;
....
get/set methods
}
我想将 UserHolder 转换为用户使用 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);
}
但它包含很多样板代码(在@Mapping 注释中),我怎么能告诉映射器我想映射 source.user 到 这个目标没有指定目标的字段?
这目前是不可能的。已经有一个功能请求 #1406 与您的需求非常相似。
在任何情况下,作为一种变通方法,您的映射器可能如下所示:
@Mapper(componentModel = "spring")
public interface UserHolderMapper {
default User toUser(UserHolder source) {
return source == null ? null : toUser(source.getUser());
}
User toUser(UserDto source);
}
我不知道UserHolder
中的对象是什么。 UserDto
只是一个推定,可以是任何对象。
如果您不想公开 User toUser(UserDto source)
那么您可以创建一个抽象映射器并使该方法在那里受到保护和抽象。 MapStruct 将能够处理它
我可能会迟到。但是以下应该可以正常工作。
@Mapper(componentModel = "spring")
public interface UserHolderMapper {
@Mapping(source = "source.user", target = ".")
User toUser(UserHolder source);
}