首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确使用MapStruct @映射和@映射?

如何正确使用MapStruct @映射和@映射?
EN

Stack Overflow用户
提问于 2020-11-30 04:18:31
回答 2查看 3.6K关注 0票数 2

嗨,我的问题是,当我做mvn clean package来构建.jar文件时,我遇到了一些错误,如下所示:

代码语言:javascript
运行
复制
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/Cactus/Documents/GitHub/Microservice/b2b/b2b-warehouse/src/main/java/com/bit/microservices/b2b/warehouse/mapper/ICategoryBpsjMapper.java:[27,33] No property named "createdDate" exists in source parameter(s). Did you mean "reasonDeleted"?
[ERROR] /C:/Users/Cactus/Documents/GitHub/Microservice/b2b/b2b-warehouse/src/main/java/com/bit/microservices/b2b/warehouse/mapper/ICategoryBpsjMapper.java:[27,33] No property named "createdDate" exists in source parameter(s). Did you mean "reasonDeleted"?
[INFO] 2 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  16.438 s
[INFO] Finished at: 2020-11-30T10:55:21+07:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project b2b-warehouse: Compilation failure: Compilation failure: 
[ERROR] /C:/Users/Cactus/Documents/GitHub/Microservice/b2b/b2b-warehouse/src/main/java/com/bit/microservices/b2b/warehouse/mapper/ICategoryBpsjMapper.java:[27,33] No property named "createdDate" exists in source parameter(s). Did you mean "reasonDeleted"?
[ERROR] /C:/Users/Cactus/Documents/GitHub/Microservice/b2b/b2b-warehouse/src/main/java/com/bit/microservices/b2b/warehouse/mapper/ICategoryBpsjMapper.java:[27,33] No property named "createdDate" exists in source parameter(s). Did you mean "reasonDeleted"?
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

但是当我通过引导仪表板运行我的项目时,右击并启动我的项目,它将正常运行。我的api很好用。我做了一些尝试。

首先,我的代码如下所示,我的mapper文件如下所示:

代码语言:javascript
运行
复制
@Mapper(componentModel = "spring")
public interface ICategoryBpsjMapper {

    ICategoryBpsjMapper INSTANCE = Mappers.getMapper(ICategoryBpsjMapper.class);

    @Mappings({ 
        @Mapping(target = "createdDate", dateFormat = "dd-MM-yyyy HH:mm:ss"),
        @Mapping(target = "modifiedDate",dateFormat = "dd-MM-yyyy HH:mm:ss")})
    CategoryBpsjResponseDto entityToDto(CategoryBPSJ entity);

    CategoryBPSJ DTOEntity(CategoryBPSJDto dto);
    
    CategoryBPSJ updateEntityFromDto(CategoryBPSJDto dto, @MappingTarget CategoryBPSJ entity);
    
    List<CategoryBpsjResponseDto> entityToDto(List<CategoryBPSJ> entityList);
    
    List<CategoryBPSJ> DTOEnity(List<CategoryBPSJDto> dtoList);

}

这是我的实体:

代码语言:javascript
运行
复制
@Data
@Entity
@Audited
@EntityListeners(AuditingEntityListener.class)
@EqualsAndHashCode(of = "id")
@ToString(of = {"id"})
@Table(name = "msCategoryBPSJ", uniqueConstraints = {
    @UniqueConstraint(name = "uk_categoryBPSJName", columnNames = { "categoryBPSJName" })})
public class CategoryBPSJ extends AuditField implements Serializable {

    private static final long serialVersionUID = 8062436315663828938L;

    @Schema(description = "Id merupakan primary key dan harus disertakan ketika edit, tipe datanya Long", example = "0", required = true)
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Schema(description = "kode kategori pengiriman", example = "BPSJCTH1", required = true)
    @NotBlank(message = "Tidak Boleh Kosong")
    private String categoryBPSCode;

    @Schema(description = "nama kategori pengiriman", example = "Toko/Gudang Tujuan Tutup", required = true)
    @NotBlank(message = "Tidak Boleh Kosong")
    private String categoryBPSJName;
    
}

下面是我扩展的AuditField类:

代码语言:javascript
运行
复制
@MappedSuperclass
@Data
@Audited
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = { "createdDate", "modifiedDate", "isDeleted" }, allowGetters = true, allowSetters = false)
public class AuditField implements Serializable {

    private static final long serialVersionUID = 6025082509703710749L;

    @Schema(description = "Status di hapus", example = "false", required = false)
    public Boolean isDeleted = false;

    @Schema(description = "Alasan di hapus", example = "apa pun alasannya", required = false)
    public String reasonDeleted = "";

    @CreatedDate
    private Date createdDate;
    @LastModifiedDate
    private Date modifiedDate;
    @CreatedBy
    private String createdBy;
    @LastModifiedBy
    private String modifiedBy;

}

下面是我的DTO AuditFieldDto类:

代码语言:javascript
运行
复制
@Data
public class CategoryBpsjResponseDto extends AuditFieldDto implements Serializable {

    private static final long serialVersionUID = -422185482845439241L;

    @Schema(description = "Id merupakan primary key dan harus disertakan ketika edit, tipe datanya Long", example = "0", required = true)
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Long id;

    @Schema(description = "kode kategori pengiriman", example = "BPSJCTH1", required = true)
    @NotBlank(message = "Tidak Boleh Kosong")
    public String categoryBPSCode;

    @Schema(description = "nama kategori pengiriman", example = "Toko/Gudang Tujuan Tutup", required = true)
    @NotBlank(message = "Tidak Boleh Kosong")
    public String categoryBPSJName;

}

这是我的AuditFieldDto课程:

代码语言:javascript
运行
复制
@Data
public class AuditFieldDto implements Serializable {

    private static final long serialVersionUID = 3758121148184815303L;

    @Schema(description = "Status di hapus", example = "false", required = false)
    public Boolean isDeleted = false;

    @Schema(description = "Alasan di hapus", example = "apa pun alasannya", required = false)
    public String reasonDeleted = "";

    private String createdDate;
    
    private String modifiedDate;
    
    private String createdBy;
    
    private String modifiedBy;

}

正如您所看到的,AuditField和AuditFieldDto有相同的字段,但是当我运行mvn clean package时,它会给我编译错误,就像前面提到的问题一样。在错误消息中,mapstruct似乎找不到正确的字段。然后我尝试删除@映射和@ the注释行,构建就成功了。看起来很可疑..。因为当我使用Boot运行时,仪表板可以很好地处理这些注释。

这是我的pom.xml:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.bit.microservices</groupId>
        <artifactId>b2b</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>b2b-warehouse</artifactId>
    <groupId>com.bit.microservices.b2b</groupId>
    <name>b2b-warehouse</name>
    <description>B2B Warehouse Service</description>
    <version>0.0.1-SNAPSHOT</version>

    <url>http://projects.spring.io/spring-boot/</url>
    <organization>
        <name>Pivotal Software, Inc.</name>
        <url>http://www.spring.io</url>
    </organization>
    <properties>
        <main.basedir>${basedir}/../..</main.basedir>
        <lombok.version>1.18.16</lombok.version>
        <org.mapstruct.version>1.4.1.Final</org.mapstruct.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.bit.microservices</groupId>
            <artifactId>model</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-envers</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

        <dependency>
            <groupId>com.bit.b2b</groupId>
            <artifactId>security</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-ui -->
        <dependency>
            <groupId>org.springdoc</groupId>
            <artifactId>springdoc-openapi-ui</artifactId>
            <version>1.4.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/io.github.classgraph/classgraph -->
        <dependency>
            <groupId>io.github.classgraph</groupId>
            <artifactId>classgraph</artifactId>
            <version>4.8.90</version>
        </dependency>


        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.modelmapper/modelmapper -->
        <dependency>
            <groupId>org.modelmapper</groupId>
            <artifactId>modelmapper</artifactId>
            <version>2.3.8</version>
        </dependency>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>${org.mapstruct.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>13</source> <!-- depending on your project -->
                    <target>13</target> <!-- depending on your project -->
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${org.mapstruct.version}</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                        <path>
                            <groupId>org.springframework.boot</groupId>
                            <artifactId>spring-boot-configuration-processor</artifactId>
                            <version>2.3.4.RELEASE</version>
                        </path>
                        <!-- other annotation processors -->
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

当我用.jar将项目构建到mvn clean package文件时,如果我想使用@映射和@映射,我在我的项目中遗漏了什么

EN

Stack Overflow用户

发布于 2020-11-30 05:45:24

我想你错过了lombok-mapstruct绑定

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65068068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档