내 매핑 메서드에 3 개의 매개 변수가 있고 세 개의 매개 변수가 모두 대상 유형의 속성 중 하나를 파생시키는 데 사용되는 경우가 있습니다.MapStruct 여러 매개 변수가있는 QualifiedByName
속성을 파생시키는 논리를 유지하면서 인터페이스에 기본 매핑 방법을 만들었습니다. 이제는이 메서드를 호출 할 때 주석에 expression = "java(/*method call here*/)"
을 사용할 수 있습니다.
mapstruct 주석과 같은 @qualifiedByName
의와, 내가 표현을 갖는 주석을 주석 시도하고 qualifiedByName를 사용하여이 작업을 수행 할 수있는 방법이 있습니까,하지만이 작동하지 않습니다
@Mapper
public interface OneMapper {
@Mapping(target="id", source="one.id")
//@Mapping(target="qualified",expression = "java(checkQualified (one, projId, code))")
@Mapping(target="qualified",qualifiedByName="checkQualifiedNamed")
OneDto createOne (One one, Integer projId, Integer val, String code);
@Named("checkQualifiedNamed")
default Boolean checkQualified (One one, Integer projId, Integer val, String code) {
if(one.getProjectId() == projId && one.getVal() == val && one.getCode().equalsIgnoreCase(code)) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}
}
덕분에, 이것은 내가 필요로하는 것에 매우 가깝다. 내가 직면 한 또 하나의 문제가있다. 실제 프로젝트에는 4 개의 매개 변수, 하나의 개체 개체와 3 개의 지원 속성, 3 개의 sup porting 속성이 Integer이고 동일한 유형의 컨텍스트가 여러 개있을 수는 없습니다. 컨텍스트로 엔티티를 만들고 그 중 하나를 소스로 유지하려고 시도했지만 엔티티의 다른 모든 특성을 무시하는 방법으로 시도했습니다. 당신이 이것을 위해 제안 할 수 있다면 제 질문에 코드 스 니펫을 업데이트 했습니까? –
답변을 업데이트했습니다. 기본적으로 모든 속성을'@ Context'를 나타내는 래퍼 클래스로 바꿀 수 있습니다. 그 하나가 훨씬 더 강력하고 당신이 사물을 수행 할 수 있습니다. [컨텍스트/상태 개체 전달] (http://mapstruct.org/documentation/stable/reference/html/#passing-context)에 대한 설명서를 살펴보십시오 – Filip
내 응용 프로그램에서 필터 용도로 새 클래스를 정의하는 것이 힘들지만, 나는 feasibility를 확인하고 Expression을 사용하거나 Filer를 정의하는 두 가지 중 하나를 결정할 것이다. 노력과 시간을 보내 주셔서 감사합니다. –