MapStruct自定义Mapper未生效:UriTypeMapper未被ExtensionMapper调用
问题原因
你用到的FHIR源类org.hl7.fhir.r4.model.Extension已经内置了返回值为String类型的getUrl()方法,MapStruct做属性自动映射时,会优先匹配类型完全兼容的getter/setter组合:源端getUrl()返回String,刚好和目标类Extension的setUrl(String)入参类型匹配,因此MapStruct直接使用了这个现成的适配逻辑,不会去读取底层UriType类型的url成员字段,自然也就不会触发你定义的UriType到String的转换Mapper。
解决方法
显式指定映射关系,强制MapStruct读取源类的UriType类型的url对应字段,而不是使用自带的getUrl()方法:
@Mapper(uses={UriTypeMapper.class}) public interface ExtensionMapper { // 新增@Mapping注解强制绑定源字段和目标字段 @Mapping(source = "urlElement", target = "url") Extension fhirtoMpi(org.hl7.fhir.r4.model.Extension extension); }
这里urlElement是FHIR模型中UriType类型url字段的标准公开访问器对应属性名,添加该注解后,MapStruct会识别到源端要映射的是类型为UriType的字段,会自动调用你定义的UriTypeMapper#fhirToMpi方法完成类型转换,生成的实现类就会符合预期。
内容的提问来源于stack exchange,提问作者Jordi
相关产品推荐
相关产品推荐

