2016-08-06 4 views

답변

3

당신이 구성 요소 모델로 봄을 선언하고 myservice의 유형에 대한 참조를 추가 할 경우이 가능해야한다 :

메커니즘이 다른 매핑 방법에 대한 액세스를 제공하기위한 의미하는지
@Mapper(componentModel="spring", uses=MyService.class) 
public interface MyMapper { ... } 

하는 것은 생성 된 코드에 의해 호출되는 , 그런 식으로 표현에 사용할 수 있어야합니다. 서비스 참조에 생성 된 필드의 올바른 이름을 사용했는지 확인하십시오.

+0

동일한 문제가 있으며 'uses'로 선언 된 클래스는 해당 메소드 중 하나가 소스 -> 타겟 매핑으로 사용되는 경우에만 자동 실행되므로 해당 사용이 표현식에있는 경우 자동 매핑됩니다. * autowired가되지 않습니다. –

+2

아, 재미있는 부분입니다. * 단 하나의 식에서 만 사용하고 싶다면. [our tracker] (https://github.com/mapstruct/mapstruct/issues)에서 문제를 열 ​​수 있습니까? 감사! – Gunnar

4

brettanomyces가 주석을 달았으므로 표현식 이외의 매핑 작업에서 서비스가 사용되지 않으면 서비스가 삽입되지 않습니다.

나는이에 발견하는 유일한 방법은 다음과 같습니다

  • 는 추상 클래스
  • 의 서비스를 주입하는 추상 클래스
  • 에 내 매퍼 인터페이스 변환이 보호 만드는의 "구현"그래서 추상 클래스는 액세스에게 내가 CDI를 사용하고

을 가지고 있지만 봄과 덜 구워 져 약한해야한다 :

@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); 

}