mapstruct 相关问题

MapStruct是一个代码生成器,用于在Java中创建高效,类型安全的bean-to-bean映射。

如何添加Map Struct处理器而不删除其他处理器路径?

我想在我的项目中使用Map Struct,但是当我在maven-compiler-plugin中实现它时,其他所有annotationProcessorPaths都从项目中删除了(最重要的是Lombok)。但几个小时后...

回答 1 投票 0

MapStruct 和 DTO,带有层次结构线实体

我从事电子商务系统,我设计实体作为超类和子类关系使用 @Inheritance(策略 = InheritanceType.JOINED) 这样子类实体就会扩展...

回答 1 投票 0

MapStruct 未生成实现类

我正在将Mapstruct和Lombok与maven和IDEA一起使用,它拒绝生成映射器实现。配置: 我将 Mapstruct 和 Lombok 与 maven 和 IDEA 一起使用,但它拒绝生成映射器实现。配置: <?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>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <java.version>11</java.version> <org.mapstruct.version>1.3.0.Beta2</org.mapstruct.version> <lombok.version>1.18.2</lombok.version> </properties> <dependencies> <!-- spring deps --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> ... <!-- lombok dep --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>${org.mapstruct.version}</version> </dependency> </dependencies> <build> <finalName>${project.artifactId}</finalName> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <executions> <execution> <id>add-source</id> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>${project.build.directory}/generated-sources/java/</source> <source>${project.build.directory}/generated-sources/annotations/</source> </sources> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <release>11</release> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </path> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${org.mapstruct.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <configuration> <archive> <manifestEntries> <Implementation-Version>${project.version}</Implementation-Version> </manifestEntries> </archive> </configuration> </plugin> </plugins> </build> ... </project> Mapstruct 和 Lombok 都用 idea 注册为注释处理器: 当我尝试使用 IDEA 构建或尝试 maven clean install 时,不会生成实现文件。 我尝试将Java从11更改为8,但仍然不起作用。 /target/ generated-sources/annotations 只是空的。具有相同配置的其他项目运行良好。 添加mapstruct-processor依赖项为我解决了这个问题。 问题是我的映射器缺少注释@Mapper。 如果你使用kotlin,则需要使用kapt而不是annotationProcessor Gradle 示例: plugins { kotlin("kapt") version "1.4.32" } ... dependencies { ... implementation("org.mapstruct:mapstruct:1.4.2.Final") kapt("org.mapstruct:mapstruct-processor:1.4.2.Final") } 之后,如果执行gradle build,就会生成实现 对我来说问题是: <useIncrementalCompilation>false</useIncrementalCompilation> 注释掉后,一切正常! <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>${jdk.target.version}</source> <target>${jdk.target.version}</target> <!--<useIncrementalCompilation>false</useIncrementalCompilation>--> <annotationProcessorPaths> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${org.mapstruct.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin> 如果您将 Kotlin 与 Maven 结合使用,则可以添加以下依赖项: <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>1.4.2.Final</version> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.4.2.Final</version> </dependency> 并将 kapt 执行添加到 kotlin-maven-plugin 中,如下所示: <plugin> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-plugin</artifactId> <version>1.5.0</version> <executions> <execution> <id>kapt</id> <goals> <goal>kapt</goal> </goals> <configuration> <sourceDirs> <sourceDir>src/main/kotlin</sourceDir> <sourceDir>src/main/java</sourceDir> </sourceDirs> <annotationProcessorPaths> <!-- Specify your annotation processors here. --> <annotationProcessorPath> <groupId>com.google.dagger</groupId> <artifactId>dagger-compiler</artifactId> <version>2.9</version> </annotationProcessorPath> </annotationProcessorPaths> </configuration> </execution> <execution> <id>compile</id> <phase>compile</phase> <goals> <goal>compile</goal> </goals> </execution> <execution> <id>test-compile</id> <phase>test-compile</phase> <goals> <goal>test-compile</goal> </goals> </execution> </executions> </plugin> 我也遇到过这个问题。就我而言,出现此错误: Java:由于错误元素存在问题,没有为 Mapper 创建实现 当应用程序运行时。 我曾经使用Spring Boot版本2.4.3当我将版本降低到2.2.6.RELEASE时它开始工作 尝试属性> Maven >注释处理>(启用)自动配置JDT APT。 我已经尝试了这里的所有内容,但没有任何效果,所以我复制了实际上在那里工作的 pom.xml,我发现我们必须在构建标记之后添加此配置。 然后编译,会在目标文件夹生成Mapper Impl类 <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories>

回答 8 投票 0

为什么 MapStruct Processor 有时会作为 Maven 插件而不是依赖项添加?

说明: 我注意到官方 MapStruct 文档和有关如何配置映射结构处理器的各种教程之间存在差异。在一些教程中,地图结构处理器...

回答 1 投票 0

MapStruct NullValuePropertyMappingStrategy.IGNORE 将空布尔值重置为 false?

使用 MapStruct 的文档,我发现可以使用 nullValuePropertyMappingStrategy =

回答 1 投票 0

为什么我不能在@Mapping属性中引用@Context参数?

使用mapstruct,我需要的是一个具有多个源的映射方法,并且这几个源被传递给其他映射方法,这样我就可以拥有所有映射的所有多个源

回答 2 投票 0

当我使用MapStruct的qualifiedByName和@Named时不生效

MapStruct版本是1.5.5.Final,JDK是17,这是我的代码 @映射器 公共接口UndoIssueConvert { UndoIssueConvert INSTANCE = Mappers.getMapper(UndoIssueConvert.class); @映射({ ...

回答 1 投票 0

在java中使用Mapstruct如何将内部Entity映射到Entity?

我有以下数据(为了简洁和清晰起见,删除了其他字段): @实体 类类别实体{ 私人长ID; 私有字符串名称; } @实体 班级

回答 1 投票 0

如果 Dto 使用 MapStruct 有 Id,则将 dto 映射到从数据库检索的实体

我正在使用 MapStruct 来制作 dto <-> 实体映射。相同的映射器用于从 dtos 创建和更新实体。对 dto 的 id 进行验证是为了了解新实体是否必须...

回答 3 投票 0

MapStruct 在更新 Entity 或 DTO 类后不会重新生成映射器

我正在编写一个 Spring Boot REST 应用程序 (Java 17)。为了将我的类从 Entity 映射到 DTO 以及反向映射,我使用 MapStruct 库(v 1.6.2)。为了实现 DTO,我使用 java 记录。对于生成...

回答 1 投票 0

完全禁用Mapstruct中的自动映射?

我想禁用映射器中的所有自动映射,并强制自己定义目标的所有映射行为。尝试过 @映射器( 组件模型=“弹簧”, 未映射的目标策略 =

回答 1 投票 0

VS Code 中的 MapStruct 错误:“没有为 Mapper 创建实现”

升级到 VS Code 1.93.1(2024 年 10 月)后,VS Code 开始无法为我的 Java 应用程序生成 MapStruct 映射器,并出现以下错误: 构建工作区时发生错误。德...

回答 1 投票 0

MapStruct - @Mapper 注释不创建 bean

我从此源下载了应用程序https://github.com/springframeworkguru/spring5-mvc-rest/tree/vendor-api 我对 MapStruct 有疑问。 @映射器 公共接口类别映射器{

回答 16 投票 0

添加新包破坏了我的 Spring Boot 应用程序

自从我在包含 Mapstructs 映射器的 Spring Boot 应用程序中添加了一个新包以来,我遇到了麻烦。看起来像这个字段: @Autowired 私人 UtenteMapper utenteMapper; 不是...

回答 1 投票 0

如何在gradle项目中配置mapstruct

我尝试将mapstruct添加到gradle spring boot项目中。 这是 build.gradle 文件的相关部分: 实现 'org.mapstruct:mapstruct:1.4.2.Final' 注释处理器'org.mapstruct:

回答 1 投票 0

False '参数“account”的类型没有名为“contact.holders.emails”的属性。' MapStruct 的 @Mapping 出现错误

在我们的项目中,我们有多个模块,其中 OpenAPI 规范是生成类的来源,代表各种版本的域模型。现在使用 MapStruct(版本 1.6.2)我正在创建映射器...

回答 1 投票 0

Mapstruct 使用另一个具有多个参数的映射器和 lombok @Builder

我想使用 Mapstruct 从两个源对象并使用 Lombok 来构建一个内部有嵌套对象的目标对象。映射的描述是: 目标: 类 Kpi { 字符串名称...

回答 1 投票 0

如何使用仅原始属性作为源的 MapStruct?

我有以下对象: @价值 公共类 CompanyDto { 整数ID; int 账户ID; } 我尝试使用 MapStruct (版本 1.5.2.Final)将两个原始属性映射到新的 CompanyDto ...

回答 1 投票 0

Mapstruct - 将平面连接列表映射到结构化列表

假设我有一个来自两个数据库表 JOIN 的对象列表。 类平{ 字符串a1,a2,a3,b1,b2,b3; } 自然的问题是将数据“展开”成......

回答 1 投票 0

使用 java MapStruct 时 Source 为 null 时列表的默认值

我在MapStruct中有以下映射器: @Mapping(源=“部门列表”,目标=“部门列表”) TargetEntity toTarget(SourceEntity 源); 我想在来源时返回“[]”...

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.