简体   繁体   English

子类的 Mapstruct 映射不起作用

[英]Mapstruct mapping of child classes is not working

I have two classes Order and TargetOrder我有两个类OrderTargetOrder

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM