MapStruct - 如何指定属性的通用类型?
MapStruct - How to specify generic type of an attribute?
Mapstruct 找不到属性的通用类型。让我们举个例子来阐明我要做什么。
考虑以下 dto:
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());
你能告诉我这是否是一个错误吗?如果有修复?或者我应该做不同的事情吗?
谢谢,
您可以自己从最新的 master (https://github.com/mapstruct/mapstruct) 构建 MapStruct,看看这是否能解决您的问题?我上周修复了一个相关的错误,我认为它与你的问题本质上是一样的。
你只需要运行 "mvn clean install" 并在你的项目中引用SNAPSHOT版本的依赖。
已在 MapStruct 1.1.0.Beta1 发布中修正
Mapstruct 找不到属性的通用类型。让我们举个例子来阐明我要做什么。
考虑以下 dto:
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());
你能告诉我这是否是一个错误吗?如果有修复?或者我应该做不同的事情吗? 谢谢,
您可以自己从最新的 master (https://github.com/mapstruct/mapstruct) 构建 MapStruct,看看这是否能解决您的问题?我上周修复了一个相关的错误,我认为它与你的问题本质上是一样的。
你只需要运行 "mvn clean install" 并在你的项目中引用SNAPSHOT版本的依赖。
已在 MapStruct 1.1.0.Beta1 发布中修正