[英]Mapstruct mapping of child classes is not working
I have two classes Order and TargetOrder我有两个类Order和TargetOrder
class Order {
Location location;
Address address;
}
class Location{
double lat;
double lng;
}
class Address{
.
.
.
}
Target Order looks something like this:目标订单看起来像这样:
class TargetOrder{
TargetAddress targetAddress;
}
class TargetAddress{
double lat;
double lng;
.
.
.
}
Now I have written MapStruct mapping for Address to TargetAddress;现在我已经编写了地址到目标地址的 MapStruct 映射;
So, something like this:所以,像这样:
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface OrderMapper {
@Mapping(...)
@Mapping(...)
TargetAddress mapAddressToTargetAddress(Address address);
@Mapping(target = "targetAddress", source = "address")
@Mapping(target = "targetAddress.lat", source = "location.lat")
@Mapping(target = "targetAddress.lng", source = "location.lng")
TargetOrder mapOrderToTargetOrder(Order order);
When I do this, mapOrderToTargetOrder
implementation doesn't use existing mapAddressToTargetAddress
当我这样做时,
mapOrderToTargetOrder
实现不使用现有的mapAddressToTargetAddress
but if I remove但如果我删除
@Mapping(target = "targetAddress.lat", source = "location.lat")
@Mapping(target = "targetAddress.lng", source = "location.lng")
Then mapper uses existing mapAddressToTargetAddress
.然后映射器使用现有的
mapAddressToTargetAddress
。
I want to map using existing mapping and then map location attributes as well.我想 map 使用现有映射,然后 map 位置属性。 I have tried using
@MappingTarget
as well it is not working.我也尝试过使用
@MappingTarget
,但它不起作用。
Is there any other way to implement this?还有其他方法可以实现吗?
Try to use mapStruct @Named
annotation and specify the additional qualifiedByName
parameter in @Mapping
annotation.尝试使用 mapStruct
@Named
注解并在@Mapping
注解中指定附加的qualifiedByName
参数。
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface OrderMapper {
@Named("mapAddressToTargetAddress")
@Mapping(...)
@Mapping(...)
TargetAddress mapAddressToTargetAddress(Address address);
@Mapping(target = "targetAddress", source = "address", qualifiedByName = "mapAddressToTargetAddress")
@Mapping(target = "lat", source = "location.lat")
@Mapping(target = "lng", source = "location.lng")
TargetOrder mapOrderToTargetOrder(Order order);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.