使用 java MapStruct 时 Source 为 null 时列表的默认值

问题描述 投票:0回答:3

我在 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源实体为空时,我应该怎么做才能默认返回[]?

java mapstruct
3个回答
0
投票

您需要设置

nullValueIterableMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT

@Mapper
。不需要
defaultValue


0
投票

您是否尝试过使用

defaultExpression
代替
defaultValue
?后者使用严格值,而第一个使用表达式语言(请参阅javadoc:https://mapstruct.org/documentation/stable/api/org/mapstruct/Mapping.html)。


0
投票

试试这个方法: @映射器 公共接口 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<>());
    }
}

}

© www.soinside.com 2019 - 2024. All rights reserved.