我有两个MapperConfig
:
@MapperConfig(
uses = {
StringTypeMapper.class,
ExtensionMapper.class
}
)
public interface ElementMapperConfig extends GenericMapperConfig {
@Mapping(target = "id", source = "idElement")
@Mapping(target = "extension", source = "extension")
Element mapElement(org.hl7.fhir.r4.model.Element fhir);
}
和GenericMapperConfig
:
@MapperConfig(
componentModel = "spring",
injectionStrategy = InjectionStrategy.CONSTRUCTOR,
nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS,
nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL
)
public interface GenericMapperConfig {
}
如您所见,我正在使用 spring
组件模型。
尽管如此,Mapper 实现正在使用 Mappers.getMapper(...)
获取所需的 Mapper。
如您所见,ElementMapperConfig
扩展了 GenericMapperConfig
,但似乎忽略了 GenericMapperConfig
中的配置。
生成的映射器示例:
@Generated(
value = "org.mapstruct.ap.MappingProcessor"
)
public class StringTypeMapperImpl implements StringTypeMapper {
private final ExtensionMapper extensionMapper = Mappers.getMapper( ExtensionMapper.class );
}
StringTypeMapper
是:
@Mapper(
config = ElementMapperConfig.class
)
public interface StringTypeMapper {
@InheritConfiguration(name = "mapElement")
StringType fhirToMpi(org.hl7.fhir.r4.model.StringType stringType);
}
我不太明白为什么 GenericMapperConfig
配置没有填充,我的意思是,我不明白为什么 componentModel = "spring"
在 上被忽略>映射器
实现。
最佳答案
文档没有提到这种组合多个MapperConfiguration
的方式。
它也没有提到另一种方法,但这个方法有效。这个想法是扩展映射器而不是配置。
引入具有通用配置的基础映射器:
@Mapper(
config = GenericMapperConfig.class
)
public interface BaseMapper {
}
将您的具体映射器建立在基础映射器的基础上,并使用特定配置对其进行配置:
@Mapper(
config = ElementMapperConfig.class
)
public interface StringTypeMapper extends BaseMapper {
@InheritConfiguration(name = "mapElement")
StringType fhirToMpi(org.hl7.fhir.r4.model.StringType stringType);
}
最后让ElementMapperConfig不继承GenericMapperConfig:
@MapperConfig(
uses = {
StringTypeMapper.class,
ExtensionMapper.class
}
)
public interface ElementMapperConfig {
@Mapping(target = "id", source = "idElement")
@Mapping(target = "extension", source = "extension")
Element mapElement(org.hl7.fhir.r4.model.Element fhir);
}
关于Mapstruct:忽略MapperConfig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70345493/