有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java mapstruct将方法应用于列表中的所有对象

我的问题是:我想使用mapstruct将类型为PersonB的类映射到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;
    }
}

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


共 (1) 个答案

  1. # 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将使用一个特定的方法来映射地址