9

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

我在 META-INF 下创建了服务文件(我更喜欢将其分配给映射 builder= 但我没有看到任何示例如何在代码中正确执行此操作)。

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

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

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

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

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

2 回答 2

29

从 Mapstruct 版本 1.3.1.Final 我们可以在 @BeanMapping、@Mapper 或 @MapperConfig 中使用注解 org.mapstruct.Builder#disableBuilder

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

查看#mapping-with-builders文档

于 2020-01-06T09:28:41.763 回答
7

可以通过NoOpBuilderProvider. 您需要org.mapstruct.ap.spi.BuilderProviderMETA-INF/services目录中创建一个包含org.mapstruct.ap.spi.NoOpBuilderProvider内容的文件。这将完全禁用构建器。

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

于 2019-02-12T17:56:03.897 回答