映射器没有使用另一个映射器,如何使用另一个映射器的映射器?
Mapper is not using another mapper, how to use a mapper from another mapper?
我正在试验 MapStruct,我想让一个映射器使用另一个映射器将多个对象组合成一个。对于我的测试,我有三个域对象,DomainObject1
、DomainObject2
和 DomainObject3
。我想将 DomainObject1
转换为一个 DTO,TransferObjectA
,它有一个字段包含第二个 DTO,TransferObjectB
,它是使用 DomainObject2
和 DomainObject3
构造的。
我有两个映射器,一个将 DomainObject2
和 DomainObject3
转换为 TransferObjectB
,它会忽略 DomainObject2
中的一个字段,因此它不会被转换:
@Mapper
public interface ObjectBMapper {
@Mapping(target = "field1", ignore = true)
TransferObjectB domainObject2ToTransferObjectB(DomainObject2 domainObject2, DomainObject3 domainObject3);
}
还有一个将 DomainObject1
转换为 TransferObjectA
的映射器,它也接受 DomainObject2
和 DomainObject3
所以它们可以使用上面的映射器转换并放在结果上TransferObjectA
:
@Mapper(uses = ObjectBMapper.class)
public interface ObjectAMapper {
TransferObjectA domainObject1ToTransferObjectA(DomainObject1 domainObject1, DomainObject2 domainObject2, DomainObject3 domainObject3);
}
然而,ObjectBMapper
似乎没有被 ObjectAMapper
使用并且 field1
被转换(这导致错误,因为它是一个 enum
).为什么 ObjectBMapper
未被使用,我如何确保 ObjectAMapper
将使用它?
MapStruct 目前只能使用具有单个源参数的其他映射器。有一个关于此功能的开放功能请求 mapstruct/mapstruct#2081。
您可以做的是使用包装器对象而不是多个源参数。
我正在试验 MapStruct,我想让一个映射器使用另一个映射器将多个对象组合成一个。对于我的测试,我有三个域对象,DomainObject1
、DomainObject2
和 DomainObject3
。我想将 DomainObject1
转换为一个 DTO,TransferObjectA
,它有一个字段包含第二个 DTO,TransferObjectB
,它是使用 DomainObject2
和 DomainObject3
构造的。
我有两个映射器,一个将 DomainObject2
和 DomainObject3
转换为 TransferObjectB
,它会忽略 DomainObject2
中的一个字段,因此它不会被转换:
@Mapper
public interface ObjectBMapper {
@Mapping(target = "field1", ignore = true)
TransferObjectB domainObject2ToTransferObjectB(DomainObject2 domainObject2, DomainObject3 domainObject3);
}
还有一个将 DomainObject1
转换为 TransferObjectA
的映射器,它也接受 DomainObject2
和 DomainObject3
所以它们可以使用上面的映射器转换并放在结果上TransferObjectA
:
@Mapper(uses = ObjectBMapper.class)
public interface ObjectAMapper {
TransferObjectA domainObject1ToTransferObjectA(DomainObject1 domainObject1, DomainObject2 domainObject2, DomainObject3 domainObject3);
}
然而,ObjectBMapper
似乎没有被 ObjectAMapper
使用并且 field1
被转换(这导致错误,因为它是一个 enum
).为什么 ObjectBMapper
未被使用,我如何确保 ObjectAMapper
将使用它?
MapStruct 目前只能使用具有单个源参数的其他映射器。有一个关于此功能的开放功能请求 mapstruct/mapstruct#2081。
您可以做的是使用包装器对象而不是多个源参数。