1

我有一个 CXF 生成的类,它有一个集合作为它的唯一属性。我需要将 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);
}

这真的应该工作吗?如果是这样,我该如何配置此映射?

4

1 回答 1

1

我找不到将其作为映射的方法,并且从@Gunnar 的其他答案中,我现在了解到这是不可能的,但是我找到了使用 annotation 的解决方法@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);
    }
}
于 2017-04-08T13:15:14.293 回答