我正在使用Spring,我开始使用我的项目中的mapstruct库,所以我有一个想法为@Mapper创建构造型注释(componentModel =" spring"),就像@SpringMapper一样。但它不会产生任何映射器。
这是不可能的,还是我做错了什么?
答案 0 :(得分:1)
这是一个非常有趣的想法,但目前尚不支持。 MapStruct注释处理器仅查找@Mapper
注释,即它将针对@SpringMapper
的定义调用,但不会针对使用@SpringMapper
注释的任何bean调用。
话虽如此,MapStruct提供了通过config classes重新配置的自己的方法:
@MapperConfig(componentModel="spring")
public interface SpringMappers {}
将所有常见选项(如组件模型)放入此类配置类,然后从各个映射器引用它:
@Mapper(config=SpringMappers.class)
public interface MyMapper {
//...
}
答案 1 :(得分:0)
感谢您的回答Gunnar。
maven的另一个可能的解决方案是: 以下maven插件将设置默认(项目范围)componentModel = spring和unmappedTargetPolicy = ERROR。
<properties>
<java.version>1.8</java.version>
<org.mapstruct.version>1.1.0.Final</org.mapstruct.version>
</properties>
<dependencies>
<dependency>
groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>UTF-8</encoding>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<debug>true</debug>
</configuration>
</plugin>
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<defaultOutputDirectory>
${project.build.directory}/generated-sources
</defaultOutputDirectory>
<processors>
<processor>org.mapstruct.ap.MappingProcessor</processor>
</processors>
<options>
<mapstruct.defaultComponentModel>spring</mapstruct.defaultComponentModel>
<mapstruct.unmappedTargetPolicy>ERROR</mapstruct.unmappedTargetPolicy>
</options>
</configuration>
<executions>
<execution>
<id>process</id>
<phase>generate-sources</phase>
<goals>
<goal>process</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>