首页 > 解决方案 > 无法映射枚举值时如何配置 MapStruct 以引发异常

问题描述

这是我的映射器:

@Mapper
public interface ProductMapper {
    ProductClassification toProductClassification(ProductTypes pisType);
}

WhereProductTypesProductClassificationare 枚举。我希望它在无法映射枚举时引发异常,但出现编译器错误: The following constants from the source enum have no corresponding constant in the target enum and must be be mapped via adding additional mappings: EXTERNAL, UNKNOWN.

我尝试使用@ValueMappings注释,但只能将其配置为将值设置为 null,这是不够的:

@ValueMappings({
    @ValueMapping(source = MappingConstants.ANY_REMAINING, target = MappingConstants.NULL)
})

当 MapStruct 映射器无法映射枚举常量时,将其配置为抛出异常的正确方法是什么?

标签: javaenumsmapstruct

解决方案


目前这是不可能的。

但是,此功能将成为下一个 1.5 版本的一部分。它已经在 SNAPSHOT 构建中实现并可用。

将有一个新的映射常量可通过它访问MappingConstants.THROW_EXCEPTION,您可以将其设置为ValueMappingTarget.

因此,在此示例中,为了对任何剩余的映射抛出异常,您可以编写:

@ValueMapping(source = MappingConstants.ANY_REMAINING, target = MappingConstants.THROW_EXCEPTION)

请注意,在回答此问题时 (29.03.2021),此功能尚未发布。


推荐阅读