我在 MapStruct 中有以下映射器:
@Mapping(source = "deptList", target = "deptList")
TargetEntity toTarget(SourceEntity source);
我想当源部门为空时返回'[]',然后我尝试这样:
@Mapping(source = "deptList", target = "deptList", defaultValue="java(List.of())")
TargetEntity toTarget(SourceEntity source);
但是编译器显示无法将 java(List.of()) 转换为 List deptList,我是否遗漏了什么?当使用mapstruct源实体为空时,我应该怎么做才能默认返回[]?
您需要设置
nullValueIterableMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT
在
@Mapper
。不需要defaultValue
。
您是否尝试过使用
defaultExpression
代替 defaultValue
?后者使用严格值,而第一个使用表达式语言(请参阅javadoc:https://mapstruct.org/documentation/stable/api/org/mapstruct/Mapping.html)。
试试这个方法: @映射器 公共接口 EntityMapper {
@Mapping(source = "deptList", target = "deptList")
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_EMPTY)
TargetEntity toTarget(SourceEntity source);
}
或者这个 @映射器 公共接口 EntityMapper {
@Mapping(source = "deptList", target = "deptList")
TargetEntity toTarget(SourceEntity source);
@AfterMapping
default void handleNullDeptList(SourceEntity source, @MappingTarget TargetEntity target) {
if (source.getDeptList() == null) {
target.setDeptList(new ArrayList<>());
}
}
}