我有一个mapstruct类,具有以下函数
abstract CustomApplication convertCustomApplication(ApplicationDTO source);
abstract RegularApplication convertRegularApplication(ApplicationDTO source);
@Named("mainConverter")
public App mainConverter(ApplicationDTO source) {
return source.isCustom() ? convertCustomApplication(source) : convertRegularApplication(source);
}
//@Mapping( qualifiedByName = "mainConverter")
abstract public List<App> convertApplications(List<ApplicationDTO> applicationList);
CustomApplication和常规应用程序都扩展了App,因此我有根据isCustom字段调用转换器的main Converter。
问题是,当我尝试构建这个时,我得到了一个模糊的映射错误,因为main Converter、ConvertNorarApplication和ConvertCustomApplication都从Application DTO映射到App(或App的子类)。所以转换应用程序不知道使用什么。有什么方法我可以明确地告诉它调用main Converter吗?我想要像@Map(合格的ByName="main Converter")这样的东西,我把它放在转换应用程序之上,(但它当然不起作用)有人知道我如何做到这一点吗?谢谢!
为了实现您正在寻找的内容,您需要使用IterableMap#合格的ByName
。
此属性旨在增强列表的选择。
例如
abstract CustomApplication convertCustomApplication(ApplicationDTO source);
abstract RegularApplication convertRegularApplication(ApplicationDTO source);
@Named("mainConverter")
public App mainConverter(ApplicationDTO source) {
return source.isCustom() ? convertCustomApplication(source) : convertRegularApplication(source);
}
@IterableMapping(qualifiedByName = "mainConverter")
abstract public List<App> convertApplications(List<ApplicationDTO> applicationList);
您正在制作合格的方法。然而,该方法似乎已经重定向到更具体的方法。因此,我建议对其他两种方法进行限定,并从主转换器中删除限定。那么你就不需要为iterable映射做任何事情了。
例如
@Named("customApplication")
abstract CustomApplication convertCustomApplication(ApplicationDTO source);
@Named("regularApplication")
abstract RegularApplication convertRegularApplication(ApplicationDTO source);
public App mainConverter(ApplicationDTO source) {
return source.isCustom() ? convertCustomApplication(source) : convertRegularApplication(source);
}
abstract public List<App> convertApplications(List<ApplicationDTO> applicationList);
这是我的例子。 我希望toDto方法使用toDto将Employee映射到EmployeeDto,但mapstruct会生成employeeDtoToEmployeeDto方法。我该怎么修? 谢谢
我有简单的对象客户端
我有两种将实体映射到域的方法。 当我试图定义实体列表到域的映射方法时,我发现了用于映射集合元素的模糊映射方法。 有没有一种方法可以定义用于映射对象集合的方法
我使用以下映射器映射实体: 对于映射为集合的实体,我只需要忽略“数据”字段。但看起来仅适用于单个实体。我还注意到生成的方法只是在for循环中使用。对此有什么解决方案吗?
我得到以下情况: 源类: null
我正在使用MapStruct从一个JPA实体映射到一个POJO DTO,在一个带有依赖项注入的Spring应用程序中。 ...并且从不为集合中的项调用修饰方法。 有没有一种方法可以让Mapstruct在集合映射中使用decorator方法,而不是在我的decorator中手动编写集合方法(这种方法很有效,但很冗长,并且违背了Mapstruct最初的目的,即不必编写这种代码)?