2017-02-17 3 views
0

* 방법이 있습니다강제 호출하지 mapstruct 내가이 같은 매핑을 사용하는 mapstruct 매퍼를 썼다

@Mapping(target = "userId", source = "id.userId") 

내가 그 코드에 stubled 자동 생성 된 mapstruct 클래스 보았다 :

if (!foobar.hasId()) { 
    return null; 
} 

hasId()이 mapstruct에서 기대하는 바가 아니기 때문에 이것은 나에게 문제가됩니다. mapstruct가이 방법을 사용하지만 id != null 또는 무언가를 검사하는 코드를 생성하지 않도록 할 수 있습니까?

@Mapping(target = "userId", expression= "java(...)")과 같은 매핑을 사용할 수 있지만 다른 방법이 있어야한다고 생각합니다.

답변

2

예 MapStruct에서 해당 presenceCheckers을 사용하지 않도록 설정할 수 있습니다. 자세한 내용은 source presence checking 설명서를 참조하십시오.

기본적으로 MapStruct AccessorNamingStrategy의 구현을 제공하는 유일한 방법입니다. DefaultAccessorNamingStrategy을 확장하고 isPresenceCheckMethod을 재정의 할 수 있습니다.

ExecutableElement에 액세스 할 수 있으며 해당 클래스의 유형 및 기타 사항을 확인할 수 있습니다.

MyAccessorNamingStrategy extends DefaultAccessorNamingStrategy { 

    @Override 
    public boolean isPresenceCheckMethod(ExecutableElement element) { 
     //You can do your checks here. You can ignore certain methods, from certain classes 

    } 

또한 당신이 SPI에 대한 예를 찾을 수있는 examples이 파일 META-INF-/services/com.example.MyAccessorNamingStrategy

와 SPI를 등록해야합니다.