MapStruct - Как указать универсальный тип атрибута?
Mapstruct не может найти универсальный тип атрибута. Давайте рассмотрим пример, чтобы уточнить, что я пытаюсь сделать.
Учитывая следующее dtos:
class ListForm<T> {
private Collection<T> adds;
private Collection<T> changes;
private Collection<T> deletes;
}
class Person {
private String name;
}
class PersonDto {
private String name;
}
Я пытаюсь реализовать следующий маппер:
@Mapper
public interface OccupantMapper {
ListForm<Person> test(ListForm<PersonDto> person);
Collection<Person> toPersons (Collection<PersonDto> persons);
}
Но вот часть того, что генерирует mapstruct:
ListForm<Person> listForm= new ListForm<Person>();
if ( occ.getAjouts() != null ) {
if ( listForm.getAjouts() != null ) {
// problem here, mapstruct can't find the type of the attribute
Collection<T> targetCollection = person.getAdds();
if ( targetCollection != null ) {
listForm.getAjouts().addAll( targetCollection );
}
}
}
Как видно из приведенного ниже кода, mapstruct не может найти тип целевой коллекции. И это не преобразовать список PersonDto в список Person. Вот что должен сгенерировать mapstruct.
Collection<Occupant> targetCollection = toPersons(person.getAdds());
Можете ли вы сказать мне, если это ошибка? Если есть исправление? Или я должен сделать это по-другому? Thks,
2 ответа
Можете ли вы собрать MapStruct из последней версии мастера ( https://github.com/mapstruct/mapstruct) и посмотреть, решит ли это проблему для вас? На прошлой неделе я исправил ошибку, которая, по-моему, была такой же, как у вас.
Вам просто нужно запустить "mvn clean install" и обратиться к SNAPSHOT-версии зависимости в вашем проекте.