Mapstruct的构造构造型

时间:2017-03-12 17:02:58

标签: java spring mapper mapstruct stereotype

我正在使用Spring,我开始使用我的项目中的mapstruct库,所以我有一个想法为@Mapper创建构造型注释(componentModel =" spring"),就像@SpringMapper一样。但它不会产生任何映射器。

这是不可能的,还是我做错了什么?

2 个答案:

答案 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>