mapstruct 相关问题

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

处理从 XSD 文件生成的两种不同 Java 类型中相同数据的最佳方法

我几乎一直在寻找解决这个问题的最佳方法。 我的情况是,我有一个提供程序,它为我提供 XSD 文件来生成我将用来调用其 SOAP api 的类型。那些 XSD 文件有时...

回答 1 投票 0

在mapstruct映射器中设置@component bean名称

我知道我可以创建一个这样的映射器: @Mapper(组件模型=“弹簧”) 公共接口 MyMapper{ 这将导致: @成分 公共类 MyMapperImpl{ 如何设置获取的bean名称...

回答 1 投票 0

映射结构:当源为空时,目标不应设置为空

我正在尝试使用mapstruct 1.2.0.CR2 映射嵌套属性。 (示例将 customer.address.houseNumber 映射到 userDTO.homeDTO.addressDTO.houseNo )。 期望:我不想设置地址...

回答 5 投票 0

Mapstruct 映射器错误:找不到符号

我在代码中有现有的映射器。我正在尝试修改它。 映射前的线路如下。我直接将 id 映射到 id 。 @Mapping(目标 = "id", 源 = "source.id") 公开

回答 1 投票 0

Mapstruct:在@Mapping

在@Mapper中使用多个参数时,@Context参数似乎无法访问 公共接口 MyMapper { @Mapping(target="target1", source="arg1.arg") //

回答 5 投票 0

由另一个映射器映射的内部字段发生 Mapstruck null 故障

在我的应用程序中,每个聊天都包含一个消息列表,每个消息都包含有关作为其发送者和接收者的用户的信息。然而,我正在努力使用带有 mapstruct 的映射器

回答 1 投票 0

MapStruct 映射器错误:结果类型 Dto 中存在未知属性“propertyName”。您指的是“null”吗?

//驱动模型 @数据 @AllArgsConstructor @NoArgs构造函数 公共类驱动程序{ 私有字符串驱动程序名称; 私有字符串许可证编号; } // 汽车模型 @数据 @AllArgsConstructor @

回答 3 投票 0

Springboot JPA HQL 查询

我正在修补以了解有关 springboot jpa 和 mapstruct 的更多信息 我有 2 个实体类并使用 pgadmin4 作为 postgresql。 PostQuestions 有一个到 Users 表的外键 userId 我现在想做一个@

回答 1 投票 0

... 中构造函数的参数 x 需要一个类型为“...”的 bean,但无法找到

我正在使用 Spring Boot 开发一个个人项目。我收到以下错误: com.learningapp.backend.AcademixHub.services.UserService 中构造函数的参数 2 需要一个类型为...的 bean...

回答 1 投票 0

mapstruct 仅当源 bean 和目标 bean 都使用 lombok 为父级时才转换父级字段

如下所示,我有扩展 BasicEntity 的 OpenSecretEntity 和扩展 BasicDto 的 OpenSecretDto 。 当我使用 OpenSecretStructMapper 和 mapstruct 的 @Mapper 将 OpenSecretEntity 转换为

回答 1 投票 0

运行 mvn install/mvn test 时出现 Maven 映射结构问题

所以,我在我的maven项目中使用mapstruct api。 这是我的应用程序 pom.xml 配置: 所以,我在我的maven项目中使用mapstruct api。 这是我的应用程序pom.xml配置: <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.3.3.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>org.mapstruct.examples.lombok</groupId> <artifactId>mapstruct-examples-lombok</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <org.mapstruct.version>1.4.1.Final</org.mapstruct.version> <org.projectlombok.version>1.18.16</org.projectlombok.version> <lombok-mapstruct-binding.version>0.1.0</lombok-mapstruct-binding.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct</artifactId> <version>${org.mapstruct.version}</version> </dependency> <!-- lombok dependencies should not end up on classpath --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${org.projectlombok.version}</version> <scope>provided</scope> </dependency> <!-- IntelliJ pre 2018.1.1 requires the mapstruct processor to be present as provided dependency --> <!-- <dependency> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>${org.mapstruct.version}</version> <scope>provided</scope> </dependency>--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> <version>4.13.1</version> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <!-- See https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html --> <!-- Classpath elements to supply as annotation processor path. If specified, the compiler --> <!-- will detect annotation processors only in those classpath elements. If omitted, the --> <!-- default classpath is used to detect annotation processors. The detection itself depends --> <!-- on the configuration of annotationProcessors. --> <!-- --> <!-- According to this documentation, the provided dependency processor is not considered! --> <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>${org.projectlombok.version}</version> </path> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok-mapstruct-binding</artifactId> <version>${lombok-mapstruct-binding.version}</version> </path> </annotationProcessorPaths> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>build-helper-maven-plugin</artifactId> <version>1.8</version> <executions> <execution> <phase>generate-sources</phase> <goals> <goal>add-source</goal> </goals> <configuration> <sources> <source>target/generate-sources</source> </sources> </configuration> </execution> </executions> </plugin> </plugins> </pluginManagement> </build> </project> 我的Pojo课程: SimpleSource.java public class SimpleSource { private String name; private String description; // getters and setters } SimpleDestination.java public class SimpleDestination { private String name; private String description; // getters and setters } 映射器接口: SimpleSourceDestinationMapper.java @Mapper public interface SimpleSourceDestinationMapper { SimpleDestination sourceToDestination(SimpleSource source); SimpleSource destinationToSource(SimpleDestination destination); } 它生成正确的实现类: SimpleSourceDestinationMapperImpl.java(生成) public class SimpleSourceDestinationMapperImpl implements SimpleSourceDestinationMapper { @Override public SimpleDestination sourceToDestination(SimpleSource source) { if ( source == null ) { return null; } SimpleDestination simpleDestination = new SimpleDestination(); simpleDestination.setName( source.getName() ); simpleDestination.setDescription( source.getDescription() ); return simpleDestination; } @Override public SimpleSource destinationToSource(SimpleDestination destination){ if ( destination == null ) { return null; } SimpleSource simpleSource = new SimpleSource(); simpleSource.setName( destination.getName() ); simpleSource.setDescription( destination.getDescription() ); return simpleSource; } } 当我运行命令时一切正常mvn clean install/mvn clean test。 但是当我运行 mvn test / mvn install 时,它失败并出现以下错误。(注意:如果我们第一次运行 mvn install/mvn test,它会起作用,因为 target 文件夹在构建之前第一次不存在) . 因此,如果我在目标文件夹存在时再次运行 mvn test / mvn install,我会收到以下错误。 mapstructapt\src\main\java\SimpleSourceDestinationMapper.java:9: 错误: 映射处理器中的内部错误: java.lang.RuntimeException: javax.annotation.processing.FilerException: 尝试在 org.mapstruct 处重新创建 SimpleSourceDestinationMapperImpl 类型的文件.ap.internal.processor.MapperRenderingProcessor.createSourceFile(MapperRenderingProcessor.java:67) 在 org.mapstruct.ap.internal.processor.MapperRenderingProcessor.writeToSourceFile(MapperRenderingProcessor.java:52) 在 org.mapstruct.ap.internal.processor.MapperRenderingProcessor .process(MapperRenderingProcessor.java:42) 在 org.mapstruct.ap.internal.processor.MapperRenderingProcessor.process(MapperRenderingProcessor.java:37) 在 org.mapstruct.ap.MappingProcessor.process(MappingProcessor.java:223) 在 org. mapstruct.ap.MappingProcessor.processMapperTypeElement(MappingProcessor.java:203) 不确定mapstruct/maven发生了什么。因此需要一些帮助来解决这个问题。 编辑: 我的 pom.xml 配置类似于下面帖子中建议的接受答案。 MapStruct 和 Lombok 不能一起工作 我对lombok和mapstruct集成没有任何问题,我唯一的问题是运行像mvn test或mvn install这样的maven命令时,它不会清理目标文件夹,然后mapstruct尝试重新创建实现文件。 我已经在这个问题上挣扎了很长时间,终于找到了一个适合我的解决方案: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>11</source> <target>11</target> <generatedSourcesDirectory>${project.build.directory}/generated-sources</generatedSourcesDirectory> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.24</version> </path> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok-mapstruct-binding</artifactId> <version>0.2.0</version> </path> <path> <groupId>org.mapstruct</groupId> <artifactId>mapstruct-processor</artifactId> <version>1.4.2.Final</version> </path> </annotationProcessorPaths> </configuration> </plugin> 我添加了 generatedSourcesDirectory 参数,它开始工作。默认值是 ${project.build.directory}/generated-sources/annotations,我还有其他源生成,例如由 querydsl 目录之外的 annotations 生成。我决定删除这个路径元素,它很有帮助。 我对lombok和mapstruct集成没有任何问题,我唯一的问题是运行mvn test或mvn install等maven命令时,它不会清理目标文件夹,然后mapstruct尝试重新创建实现文件。 所以,使用maven的选项clean。它将清除您的目标文件夹。 -> 例如mvn clean install。 看来你终于没有问题了... 我也有类似的问题。我相信这是由多个插件生成代码、它们的输出目录和 maven-compiler-plugin 将 useIncrementalCompilation 设置为 true 引起的。就我而言,将 useIncrementalCompilation 设置为 false 有效,但不建议。 就我而言,我使用的插件及其各自的输出目录如下: 插件 输出目录 avro-maven-插件 ${project.build.directory}/生成源 maven 编译器插件 ${project.build.directory}/ generated-sources/annotations apt-maven-插件 ${project.build.directory}/ generated-sources/java 我怀疑问题是 avro-maven-plugin 输出到 maven-compiler-plugin 输出父目录。将每个插件设置为其自己的同级目录是有效的。 插件 输出目录 avro-maven-插件 ${project.build.directory}/ generated-sources/avro maven 编译器插件 ${project.build.directory}/ generated-sources/annotations apt-maven-插件 ${project.build.directory}/ generated-sources/java 更改类SimpleSourceDestinationMapperImpl的名称,它将被修复,因为在构建时带有注释@Mapper的接口SimpleSourceDestinationMapper将生成已经存在的SimpleSourceDestinationMapperImpl.java。

回答 4 投票 0

MapStruct 映射对象所有属性的默认值的最简单方法

假设我有一个目标对象 我的对象{ 布尔值 myBoolean; int myInt; ... } 其中字段 myBoolean 和 myInt 是必需的(即,如果您尝试在 MyObject 的 Builder 上调用 build()

回答 1 投票 0

未注入 Mapstruct 映射器

发生了一些奇怪的事情。我的 Mapstruct 映射器没有注册为 Spring 组件,尽管 IntelliJ UI 说它是。它导致我的控制器测试失败 @RestController @

回答 1 投票 0

Mapstruct - 在整个项目中按名称忽略字段

我有一个项目,我经常在其中映射 dto -> db 模型。几乎我所有的数据库模型都有一些附加字段,例如版本,这些字段从未从 dto 映射。 有没有可能或者优雅的工作...

回答 1 投票 0

MapStruct - 在一个地方工作,但不在另一个地方工作

过去几天我在使用mapstruct时遇到了问题。这本来应该是一项简单的工作,直到奇怪的事情发生了。 我有 BusinessUnit (BU) 、 UserBusinessUnitRole (UBUR) 和 Ro...

回答 1 投票 0

如何在单元测试中获取装饰后的 Mapstruct 映射器的实例?

我想测试 Mapstruct 映射器。如果我将测试集成并使用 @SpringBootTest 进行注释,下面的代码就可以工作。但是,我想将其作为单元测试。我如何获得那个装饰...

回答 1 投票 0

Spring Mapstruct 如何获取延迟初始化实体字段的信息?

我有两个具有 ManyToOne 关系和延迟获取类型的实体: @实体 公共类项目{ 私人长ID; 私有字符串标题; @ManyToOne(fetch = FetchType.LAZY) 私人类别美食...

回答 2 投票 0

Mapstruct 将整个属性设置为 null,而不是嵌套类中的所有属性

我当前的映射器如下所示: 公共抽象 OwnerResponse toOwnerResponse(Ownerowner); 所有者具有 id、name 等基本属性。映射这些属性可以正常工作。 现在主人也有一个

回答 1 投票 0

MapStruct - 单个对象中的对象的映射列表

我从第三方获取了一份对象列表,但它始终只包含一个对象。因此,在目标的最后,我将其创建为对象而不是列表。该对象包含多个列表

回答 3 投票 0

如何在Mapstruct中设置Mapping来获取Child的DTO中Parent的字段?

公开课家长{ 字符串父字段; } 公共类子类扩展父类{ } 公共类ChildDTO{ 字符串父字段; } @Mapper(组件模型=“弹簧”) 公共接口

回答 1 投票 0

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