使用不可变对象时关闭 MapStruct 中的 "builders"
Turn off "builders" in MapStruct when using Immutables
如何在 MapStruct 中完全禁用 "builders"?我根本不想使用它们,因为它们给我带来了各种问题。
我在 META-INF 下创建了服务文件(我更喜欢将其分配给映射构建器的方法=但我没有看到任何示例如何在代码中正确执行此操作)。
它仍在尝试使用我要映射到的 "ModifiableXXX" 实例的 Immutables "builder" 实例实例。如果可用的话,我什至会采取一种方法将其强制为可修改类型。
在另一个映射中,使用更新 ModifiableXXX(使用 @AfterMapping 和 @MappingTarget)方法有效。
我的映射器现在看起来像这样:
@Mapper
public interface MongoProjectMapper
{
ModifiableProject mapModel(MongoProject project);
@AfterMapping
ModifiableProject updateProject(MongoEntity e, @MappingTarget ModifiableProject p);
}
可以通过 NoOpBuilderProvider
完全禁用构建器。您需要在 META-INF/services
目录中创建一个 org.mapstruct.ap.spi.BuilderProvider
文件,内容为 org.mapstruct.ap.spi.NoOpBuilderProvider
。这将完全禁用构建器。
有一个功能请求可以通过 @BeanMapping
或在映射器级别使它更细化并禁用它。看看mapstruct/mapstruct#1661
从 Mapstruct 1.3 版本开始。1.Final 我们可以在 @BeanMapping、@Mapper 或 @MapperConfig
中使用注解 org.mapstruct.Builder#disableBuilder
@Mapper(builder = @Builder(disableBuilder = true))
public interface ProjectMapper
如何在 MapStruct 中完全禁用 "builders"?我根本不想使用它们,因为它们给我带来了各种问题。
我在 META-INF 下创建了服务文件(我更喜欢将其分配给映射构建器的方法=但我没有看到任何示例如何在代码中正确执行此操作)。
它仍在尝试使用我要映射到的 "ModifiableXXX" 实例的 Immutables "builder" 实例实例。如果可用的话,我什至会采取一种方法将其强制为可修改类型。
在另一个映射中,使用更新 ModifiableXXX(使用 @AfterMapping 和 @MappingTarget)方法有效。
我的映射器现在看起来像这样:
@Mapper
public interface MongoProjectMapper
{
ModifiableProject mapModel(MongoProject project);
@AfterMapping
ModifiableProject updateProject(MongoEntity e, @MappingTarget ModifiableProject p);
}
可以通过 NoOpBuilderProvider
完全禁用构建器。您需要在 META-INF/services
目录中创建一个 org.mapstruct.ap.spi.BuilderProvider
文件,内容为 org.mapstruct.ap.spi.NoOpBuilderProvider
。这将完全禁用构建器。
有一个功能请求可以通过 @BeanMapping
或在映射器级别使它更细化并禁用它。看看mapstruct/mapstruct#1661
从 Mapstruct 1.3 版本开始。1.Final 我们可以在 @BeanMapping、@Mapper 或 @MapperConfig
中使用注解 org.mapstruct.Builder#disableBuilder@Mapper(builder = @Builder(disableBuilder = true))
public interface ProjectMapper