MapStruct - 如何指定属性的泛型类型?

时间:2016-02-11 10:20:25

标签: java mapstruct

Mapstruct无法找到属性的泛型类型。让我们举一个例子来澄清我想要做的事情。

考虑以下dtos:

Unable to load the specified metadata resource

我尝试实现以下映射器:

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;
}

但这是mapstruct生成的一部分:

@Mapper
public interface OccupantMapper {
    ListForm<Person> test(ListForm<PersonDto> person);

    Collection<Person> toPersons (Collection<PersonDto> persons);
}

正如您在下面的代码中看到的,mapstruct无法找到目标集合的类型。并且它不会将PersonDto列表转换为Person列表。这是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 );
            }
        }
    }

你能告诉我这是不是一个错误?如果有修复?或者我应该采用不同的方式吗? THKS,

2 个答案:

答案 0 :(得分:0)

您可以自己从最新的主人(https://github.com/mapstruct/mapstruct)构建MapStruct,看看这是否能解决您的问题?我上周修复了一个相关的bug,我认为这个问题与你的问题基本相同。

您只需要运行“mvn clean install”并参考项目中SNAPSHOT版本的依赖项。

答案 1 :(得分:0)

已在MapStruct 1.1.0.Beta1发布中更正