【发布时间】:2017-03-12 17:02:58
【问题描述】:
我正在使用 Spring,并且我从项目中的 mapstruct 库开始,所以我想为 @Mapper(componentModel = "spring") 创建原型注释,例如 @SpringMapper。但它不会生成任何映射器。
这是不可能的还是我做错了什么?
【问题讨论】:
标签: java spring mapper mapstruct stereotype
我正在使用 Spring,并且我从项目中的 mapstruct 库开始,所以我想为 @Mapper(componentModel = "spring") 创建原型注释,例如 @SpringMapper。但它不会生成任何映射器。
这是不可能的还是我做错了什么?
【问题讨论】:
标签: java spring mapper mapstruct stereotype
这是一个非常有趣的想法,但目前不支持。 MapStruct 注释处理器仅查找 @Mapper 注释,即它将被调用以用于 @SpringMapper 的定义,但不会用于任何带有 @SpringMapper 注释的 bean。
话虽如此,MapStruct 通过config classes 提供了自己的重用配置方法:
@MapperConfig(componentModel="spring")
public interface SpringMappers {}
将组件模型等所有常用选项放入此类配置类,然后从各个映射器中引用它:
@Mapper(config=SpringMappers.class)
public interface MyMapper {
//...
}
【讨论】:
感谢您的回答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>
【讨论】: