2016-08-06 37 views

回答

3

如果聲明Spring作爲組件模型和添加引用的myservice類型應該是可能的:

@Mapper(componentModel="spring", uses=MyService.class) 
public interface MyMapper { ... } 

也就是說機構是指用於提供訪問其他的映射方法,以通過生成的代碼被稱爲,但你也應該能夠在表達式中使用它們。只要確保您使用服務引用生成的字段的正確名稱。

+0

我有同樣的問題,看來用'使用'聲明的類將只有自動裝配,如果他們的方法之一用作源 - >目標映射,所以如果他們的唯一用途是在表達式中,他們將* not * get autowired –

+2

啊,如果你只*想在表達式中使用它,這是一個有趣的點。你可以在[我們的追蹤器](https://github.com/mapstruct/mapstruct/issues)中打開一個問題嗎?謝謝! – Gunnar

4

正如brettanomyces所述,如果服務不用於除表達式之外的映射操作,則服務將不會被注入。

,我發現這個問題的唯一辦法是:

  • 變換我的映射器接口爲一個抽象類
  • 注入服務的抽象類
  • 使其保護,因此上述的「執行」抽象類可以訪問

我使用CDI,但它應該與春季samel:

@Mapper(
     unmappedTargetPolicy = org.mapstruct.ReportingPolicy.IGNORE, 
     componentModel = "spring", 
     uses = { 
      // My other mappers... 
     }) 
public abstract class MyMapper { 

    @Autowired 
    protected MyService myService; 

    @Mappings({ 
     @Mapping(target="x", expression="java(myservice.findById(obj.getId()))")") 
    }) 
    public abstract Dto myMappingMethod(obj); 

}