如何将 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);
}
}
我生成了一个 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);
}
}