MapStruct是否可以在类级别为未知值定义默认枚举策略?

问题描述

我希望在mapper类级别定义一个策略,该策略表示如果未映射枚举值,则将其映射为null。

就像我会在方法级别上写一样:

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

因此它适用于mapstruct自动生成的所有子映射方法,而不必强迫我声明所有这些子映射方法只是为了添加此行。

解决方法

为您的枚举创建一个“类”映射器,然后将其用于具有uses批注的@Mapper属性的其他映射器中。

例如:

public interface MyEnumMapper {

    @ValueMapping( source = MappingConstants.ANY_REMAINING,target = MappingConstants.NULL )
    public String asString(MyEnum myenum);
}

然后使用它

@Mapper(uses=MyEnumMapper.class)
public class CarMapper {

    CarDto carToCarDto(Car car);
}

(假设Car对象的属性类型为MyEnum

在此处查看完整的文档:https://mapstruct.org/documentation/stable/reference/html/#invoking-other-mappers