【问题标题】:mapstruct apply method to all objects from a listmapstruct 将方法应用于列表中的所有对象
【发布时间】:2021-12-21 11:05:32
【问题描述】:

我的问题:我想使用 mapstructPersonB 类型的类映射到 PersonA 并修剪在 List<Address> addresses 中找到的所有字符串。

public class PersonA {

     List<Address> addresses;
}

public class PersonB {
     List<Address> addresses;
}

public Address {
     String name;
}

@Mapper
public interface PersonMapper {

    @Mapping(target = "addresses.name", qualifiedByName = "trim")
    public PersonA mapToPersonA(final PersonB person);

    @Named("trim")
    public static String trim(final String value) {
        return value != null ? value.trim() : null;
    }
}

我的结构有点复杂,但我试着总结一下。我不知道为什么这个映射器没有按预期工作以及为什么没有修剪字符串。

【问题讨论】:

    标签: java mapstruct


    【解决方案1】:

    目前 MapStruct 不允许为集合定义嵌套目标映射。

    除此之外,您的PersonAPersonB 具有相同的Address 类型。这意味着 MapStruct 不会创建对象的副本,而是通过引用复制它。

    要解决第一个问题,您需要定义一个显式方法来映射Address

    例如

    @Mapper
    public interface PersonMapper {
    
        PersonA mapToPersonA(final PersonB person);
    
        @Mapping(target = "name", qualifiedByName = "trim")
        Address cloneAddress(Address address);
    
        @Named("trim")
        public static String trim(final String value) {
            return value != null ? value.trim() : null;
        }
    }
    

    这也将解决第二个问题,因为 MapStruct 将使用特定方法来映射地址。

    【讨论】:

      猜你喜欢
      • 2021-10-08
      • 1970-01-01
      • 2023-04-01
      • 2019-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      相关资源
      最近更新 更多