如何在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);
}
答案 0 :(得分:6)
从Mapstruct版本1.3.1开始,我们可以在以下位置使用批注org.mapstruct.Builder#disableBuilder:@ BeanMapping,@ Mapper或@MapperConfig
@Mapper(builder = @Builder(disableBuilder = true))
public interface ProjectMapper
答案 1 :(得分:3)
可以通过NoOpBuilderProvider
完全禁用构建器。您需要在org.mapstruct.ap.spi.BuilderProvider
目录中以META-INF/services
作为内容的org.mapstruct.ap.spi.NoOpBuilderProvider
文件。这将完全禁用构建器。
有一个功能请求,可以使其更精细,并通过@BeanMapping
或在映射器级别将其禁用。看看mapstruct/mapstruct#1661