【问题标题】:MapStruct Multiple values in @BeanMapping(qualifiedByName)MapStruct 中的多个值 @BeanMapping(qualifiedByName)
【发布时间】:2021-10-25 12:06:13
【问题描述】:

我有一个映射器抽象类,其中我有一个从 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
 }
}

【问题讨论】:

    标签: java spring mapstruct


    【解决方案1】:

    目前不支持选择多个不同的@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"})
    

    【讨论】:

      猜你喜欢
      • 2018-05-21
      • 2020-12-21
      • 2022-08-09
      • 2022-08-19
      • 2020-09-12
      • 2020-12-20
      • 2020-05-14
      • 2020-03-22
      相关资源
      最近更新 更多