首页 > 解决方案 > MapStruct @BeanMapping(qualifiedByName) 中的多个值

问题描述

我有一个映射器抽象类,其中我有一个从 dto 映射实体的函数。我想从这个抽象类中使用三种不同的方法,每个方法负责映射不同的东西。每个函数都用@Named我放的主要映射函数及以上注释@BeanMapping。如果我选择这三个函数中的一个,并且我将其命名为这样,@BeanMapiing(qualifiedByName = "x")一切正常,但我想通过将它们的名称作为这样的数组来使用它们,它们@BeanMapping(qualifiedByName = {"x","y","z"})都没有在实现的方法中使用。有什么办法可以使这项工作?我的代码如下所示:

public abstract class EntityMapper{
 @BeanMapping(qualifiedByName = {"x","y","z"})
 public abstract Entity dtoToEntity(Dto dto);
 
 @Named("x")
 @AfterMapping
 public void methodX(Dto dto){
 //implementation
 }

 @Named("y")
 @AfterMapping
 public void methodY(Dto dto){
 //implementation
 }

 @Named("z")
 @AfterMapping
 public void methodZ(Dto dto){
 //implementation
 }
}

标签: javaspringmapstruct

解决方案


目前不支持选择多种不同的@Named方法。当在其中使用多个方法时,BeanMapping#qualifiedByName您需要在类或方法上使它们都可用。

我建议通过将您的方法移动到不同的类/接口中然后注释那个来研究嵌套限定符。

例如

@Named("classLevel")
public class Utils {

    @Named("methodLevel")
    @AfterMapping
    public void methodX(Dto dto){
        //implementation
    }

    @Named("methodLevel")
    @AfterMapping
    public void methodY(Dto dto){
        //implementation
    }

    @Named("methodLevel")
    @AfterMapping
    public void methodZ(Dto dto){
        //implementation
    }
}

接着

@BeanMapping(qualifiedByName = {"classLevel", "methodLevel"})

推荐阅读