如何将 String 属性 映射到 List<String> 属性 的第一个元素?

How to map a String property into the first element of a List<String> property?

我生成了一个 CXF class,其中只有一个集合 属性。我需要将单个值从我的 DTO 映射到该集合的一个元素,如:

class DTO {
    String dto;
}

class A {
    String a;
}

class B {
    List<A> b;
}

interface Mapper {
    @Mappings({
        @Mapping(source="dto", target="b.a")
    })
    B getBfromDTO(DTO dto);
}

这真的有用吗? 如果是这样,我该如何配置此映射?

我找不到将其作为映射来执行此操作的方法,并且从@Gunnar 的其他答案中我现在明白这是不可能的,但我找到了使用注释 @AfterMapping 的解决方法。

@AfterMapping 允许在映射发生后将方法指定为 运行,因此我为对象的非集合属性创建了映射,并为填充集合创建了 @AfterMapping对象。

class DTO {
    String a;
    String x;
}

class A {
    String a;
}

class B {
    String x;
    List<A> b;
}

abstract class Mapper {
    @Mappings({
        @Mapping(source="x", target="x")
    })
    protected abstract B getBfromDTO(DTO dto);

    @AfterMapping
    protected void fillCollections(DTO dto, @MappingTarget B b) {
        b.getB().add(dto.a);
    }
}