#mapstruct
#mapstruct
Вопрос:
public abstract class CaseDTOBase{
private Integer version;
public static void mapFromCaseToCaseDTO(Fall fall, CaseDTOBase caseDTOBase) {
caseDTOBase.setVersion(fall.getVersion());}
}
}
public class AufCaseDTO extends CaseDTOBase{
private Integer version;
public static AufCaseDTO from(AufFall aufFall, Fall fallGemeldetAnPKR) {
AufCaseDTO aufCaseDTO = AufCaseDTO.builder().version(aufFall.getVersion()).build();
CaseDTOBase.mapFromCaseToCaseDTO(aufFall.getFall(), aufCaseDTO);
return aufCaseDTO;
}
}
Как вы можете видеть, одна переменная использует aufFall.GetVersion(), а другая переменная версии использует aufFall.getFall().GetVersion() , я не могу добавить обе внутри MapStruct, потому что в ней говорится, что она не допускает дублирования. Как я могу сделать это в MapStruct?
@Mapping(target = "version", source = "aufFall.version")
@Mapping(target = "version", source = "aufFall.fall.version")
@Mapping(target = "pksamAufFallDTO", source = "aufFall")
AufCaseDTO from(AufFall aufFall, Fall fallGemeldetAnPKR);
Комментарии:
1. Есть только одна версия? Чего вы пытаетесь достичь? Должно
aufFall.version
быть отображено или альтернативаaufVall.fall.version
.2. Оба должны быть сопоставлены. Это затенение переменной в Java
Ответ №1:
MapStruct не поддерживает использование одного и того же target
свойства в нескольких сопоставлениях. Чтобы достичь того, что вы ищете, вам нужно будет написать для этого свой собственный метод.
например
@Mapper
public interface MyMapper {
@Mapping(target = "version", source = "aufFall", qualifiedByName = "aufFallToVersion")
@Mapping(target = "pksamAufFallDTO", source = "aufFall")
AufCaseDTO from(AufFall aufFall, Fall fallGemeldetAnPKR);
@Named("aufFallToVersion")
default Integer toVersion(AufFall AufFall) {
if (aufFall == null) {
return null;
}
if (aufFall.getVersion() != null) {
return aufFall.getVersion();
} else if (aufFall.getFall() != null amp;amp; aufFall.getFall().getVersion() != null) {
return aufFall.getFall().getVersion();
} else {
return null;
}
}
}
Комментарии:
1. Спасибо, Филип, я думаю, это сработает для меня. Я не мог поставить «голосовать», потому что у меня не так много прав.
2. Вам не нужно голосовать, но вы можете принять ответ. У вас есть права на это, поскольку вы задали вопрос 🙂