使用不可变项时,请在MapStruct中关闭“构建器”

时间:2019-02-12 17:25:20

标签: mapstruct immutables-library

如何在MapStruct中完全禁用“构建器”?我根本不想使用它们,因为它们会给我造成各种问题。

我在META-INF下创建了服务文件(我希望有一种将其分配给映射builder =的方法,但是我没有看到如何在代码中正确执行该服务的示例)。

它仍在尝试使用我要映射到的“ ModifiableXXX”实例的Immutables“ builder”实例实例。如果有的话,我什至采取一种将其强制为可修改类型的方法。

在另一个映射中,使用更新ModifiableXXX(带有@AfterMapping和@MappingTarget)方法有效。

我的映射器现在看起来像这样:

@Mapper
public interface MongoProjectMapper
{
    ModifiableProject mapModel(MongoProject project);

    @AfterMapping
    ModifiableProject updateProject(MongoEntity e, @MappingTarget ModifiableProject p);
}

2 个答案:

答案 0 :(得分:6)

从Mapstruct版本1.3.1开始,我们可以在以下位置使用批注org.mapstruct.Builder#disableBuilder:@ BeanMapping,@ Mapper或@MapperConfig

@Mapper(builder = @Builder(disableBuilder = true))
public interface ProjectMapper

看看#mapping-with-buildersdocumentation

答案 1 :(得分:3)

可以通过NoOpBuilderProvider完全禁用构建器。您需要在org.mapstruct.ap.spi.BuilderProvider目录中以META-INF/services作为内容的org.mapstruct.ap.spi.NoOpBuilderProvider文件。这将完全禁用构建器。

有一个功能请求,可以使其更精细,并通过@BeanMapping或在映射器级别将其禁用。看看mapstruct/mapstruct#1661