问题标签 [mapstruct]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
578 浏览

php - 相当于 PHP 的 Java Orika/Dozer/MapStruct 数据映射器(Laravel/Eloquent)?

我想知道是否有用于 PHP/Laravel/etc 的 java 的 Orika 数据映射器的类似物?

我环顾四周,看到了 Doctrine 等,但这些似乎只是 ORM 的。我需要的是从旧的过时(严重规范化的数据库)映射/导入到新的 laravel/eloquent 数据库中。我有使用 Spring MVC 的经验,并且通常会使用 Orika 将旧对象映射到新对象。

PHP有类似的东西吗?

澄清一下,这纯粹是为了将旧数据库结构中的数据摄取到新数据库中。一旦我们对数据在新表结构中的外观感到满意,它将不再被使用。

作为最后的手段,我们甚至可以求助于在 java 中构建一个导入工具,但更喜欢 PHP 解决方案,因为其他开发人员在那里有经验。

0 投票
1 回答
5269 浏览

java - Mapstruct 忽略目标嵌套属性映射

我有以下 DTO 和域对象。我正在使用 Mapstruct 将域对象复制到 DTO 对象。

使用下面的 Mapper 将域映射到 DTO。我不想将电话属性从域映射到 DTO。怎么做?我尝试在映射忽略中提供嵌套目标属性,但它给出了错误:

0 投票
2 回答
2153 浏览

java - 嵌套源和嵌套目标属性的 MapStruct 错误

mapstruct用于在下面的 DTO 中转换域是正在使用的映射:-

所以我在源端和目标端都有一些结构,但我得到以下错误: -

如果我有 Set

资源 -

目标 -

0 投票
1 回答
6514 浏览

java - 映射处理器中的内部错误:java.lang.StackOverflowError

在尝试映射我的域对象时,我得到以下 StackOverflowError 异常。我试图忽略导致循环依赖的属性无济于事。

我的域模型的中心是 WorkoutSet,它有一个用户和一个练习。

如果我从 WorkoutSetMapper 中删除映射注释,则会按预期生成 UserMapperImpl 和 ExerciseMapperImpl。

错误:(15, 1) java:映射处理器中的内部错误:com.sun.tools.javac.code.Type$ClassType.accept(Type.java:786) at com.sun.tools 的 java.lang.StackOverflowError .javac.code.Types$UnaryVisitor.visit(Types.java:4652) 在 com.sun.tools.javac.code.Types.supertype(Types.java:2315) 在 com.sun.tools.javac.code.Types $13.visitClassType(Types.java:1966) at com.sun.tools.javac.code.Types$13.visitClassType(Types.java:1955) at com.sun.tools.javac.code.Type$ClassType.accept(Type .java:786) 在 com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4571) 在 com.sun.tools.javac.code.Types.asSuper(Types.java:1952) 在com.sun.tools.javac.code.Types$13.visitClassType(Types.java:1968) 在 com.sun.tools.javac.code.Types$13.visitClassType(Types.java:1955) 在 com.sun.tools。 javac.code。Type$ClassType.accept(Type.java:786) at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4571) at com.sun.tools.javac.code.Types.asSuper( Types.java:1952) 在 com.sun.tools.javac.code.Types$13.visitClassType(Types.java:1975) 在 com.sun.tools.javac.code.Types$13.visitClassType(Types.java:1955)在 com.sun.tools.javac.code.Type$ClassType.accept(Type.java:786) 在 com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4571) 在 com.sun .tools.javac.code.Types.asSuper(Types.java:1952) 在 com.sun.tools.javac.code.Types$13.visitClassType(Types.java:1975) 在 com.sun.tools.javac.code。 Types$13.visitClassType(Types.java:1955) at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:786) at com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit (类型.java:4571) 在 com.sun.tools.javac.code.Types.asSuper(Types.java:1952) 在 com.sun.tools.javac.code.Types$13.visitClassType(Types.java:1975) 在 com.sun。 tools.javac.code.Types$13.visitClassType(Types.java:1955) at com.sun.tools.javac.code.Type$ClassType.accept(Type.java:786) at com.sun.tools.javac.code .Types$DefaultTypeVisitor.visit(Types.java:4571) at com.sun.tools.javac.code.Types.asSuper(Types.java:1952) at com.sun.tools.javac.code.Types$4.visitClassType( Types.java:921) 在 com.sun.tools.javac.code.Types$4.visitClassType(Types.java:844) 在 com.sun.tools.javac.code.Type$ClassType.accept(Type.java:786 ) 在 com.sun.tools.javac.code.Types.isSubtype(Types.java:840) 在 com.sun.com.sun.tools.javac.code.Types$DefaultTypeVisitor.visit(Types.java:4571)。 tools.javac.code.Types.isSubtype(Types.java:804) 在 com.sun.tools.javac.model.JavacTypes.isSubtype(JavacTypes.java:98) 在 org.mapstruct.ap.internal.util.workarounds.SpecificCompilerWorkarounds.isSubtype(SpecificCompilerWorkarounds.java:76) 在 org.mapstruct .ap.internal.util.workarounds.TypesDecorator.isSubtype(TypesDecorator.java:68) 在 org.mapstruct.ap.internal.model.common.Type.isSubType(Type.java:638) 在 org.mapstruct.ap.internal .model.common.Type.isCollection(Type.java:628) 在 org.mapstruct.ap.internal.model.common.Type.isCollectionOrMap(Type.java:624) 在 org.mapstruct.ap.internal.model.common .Type.getAlternativeTargetAccessors(Type.java:598) at org.mapstruct.ap.internal.model.common.Type.getPropertyWriteAccessors(Type.java:419) at org.mapstruct.ap.internal.model.source.TargetReference$BuilderFromTargetMapping .getTargetEntries(TargetReference.java:144) 在 org.mapstruct.ap.internal.model.source.TargetReference$BuilderFromTargetMapping.build(TargetReference.java:120) 在 org.mapstruct.ap.internal.model.source.Mapping.init( Mapping.java:227) 在 org.mapstruct.ap.internal.model.source.SourceMethod$Builder.build(SourceMethod.java:207) 在 org.mapstruct.ap.internal.processor.MethodRetrievalProcessor.getMethodRequiringImplementation(MethodRetrievalProcessor.java: 257) 在 org.mapstruct.ap.internal.processor.MethodRetrievalProcessor.retrieveMethods(MethodRetrievalProcessor.java:148) 在 org.mapstruct.ap org.mapstruct 中的 .internal.processor.MethodRetrievalProcessor.retrieveMethods(MethodRetrievalProcessor.java:163)。ap.internal.processor.MethodRetrievalProcessor.retrieveMethods(MethodRetrievalProcessor.java:163) 在 org.mapstruct.ap.internal.processor.MethodRetrievalProcessor.retrieveMethods(MethodRetrievalProcessor.java:163) 在 org.mapstruct.ap.internal.processor.MethodRetrievalProcessor。 org.mapstruct.ap.internal.processor.MethodRetrievalProcessor.retrieveMethods 上的retrieveMethods(MethodRetrievalProcessor.java:163) .......

我的域类如下

我的 DTO 课程如下

我的映射器接口如下

ClassMapper 定义如下

我省略了 getter 和 setter 方法以避免出现大量文本,但可以在此处找到整个代码库https://github.com/tonsV2/Lift-Log-Backend。关于我做错了什么的任何线索?

0 投票
2 回答
10071 浏览

java - MapStruct:嵌套迭代到非迭代映射?

我找到了这个关于使用 Qualifier 的 Iterable 到 Non-Iterable 映射的示例:

https://github.com/mapstruct/mapstruct-examples/tree/master/mapstruct-iterable-to-non-iterable

但是如何使这个映射能够映射嵌套属性(使用点注释)?

例如,将源对象中集合的第一个元素的字段 xyz 映射到目标对象上的普通字段?

该示例定义了一个限定符

然后定义一个自定义映射器

最后,映射定义为

但是,如果我想从电子邮件集合的第一个元素中提取特定字段,例如我会使用代码完成emails.get(0).getEmailAddress吗?

例如,我希望编写这样的映射:

0 投票
3 回答
8481 浏览

java - 如何使用 mapstruct 将枚举转换为 POJO?

如何在没有自定义实现的情况下使用 mapstruct 将枚举转换为 POJO?

例如

像 POJO

仅供参考,我使用 MapStruct 1.1.0.Final。

0 投票
1 回答
765 浏览

maven - 如何在生成的源上制作焊接查找类

我有一个 maven 项目,我正在使用 MapStruct 生成映射器,以帮助将实体转换为 DTO,反之亦然。此映射器在 maven 的 generate-sources 阶段生成,并存储在 target/generated-sources 和 target/AppName/WEB-INF/classes 文件夹中。

例如,我有这个 Mapper

我将 MapStruct 配置为使用 CDI,因此它将生成以下内容:

它在 Wildfly 服务器上运行时运行良好,问题是我正在尝试对此类进行junit测试,为此,我实现了一个自定义运行器,如下所示:

和:

这些实现取自这里

最后,测试:

当我尝试运行时,这是控制台输出:

log4j:WARN 找不到记录器 (org.jboss.logging) 的附加程序。log4j:WARN 请正确初始化 log4j 系统。log4j:WARN 有关详细信息,请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig

关于日志的警告,以及以下异常:

java.lang.ExceptionInInitializerError at br.com.treinoos.common.cdi.WeldJUnit4Runner.createTest(WeldJUnit4Runner.java:15) at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266) at org.junit.internal .runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 在 org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 在org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java: 71)在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) 在 org.junit.runners.ParentRunner。访问$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt .internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit .runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner .run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 原因:org.jboss.weld.exceptions.DeploymentException: WELD-001408:在注入点 [BackedAnnotatedField] @Inject private br.com.treinoos.model.core.business.treinoos.mappers.RuleMapperTest.ruleMapper 在 br.com.treinoos.model.core.business 的类型 RuleMapper 的不满足依赖关系。 treinoos.mappers.RuleMapperTest.ruleMapper(RuleMapperTest.java:0) at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:359) at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java: 281) 在 org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:155) 在 org.jboss.weld.bootstrap.Validator .validateBean(Validator.java:518) 在 org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:68) 在 org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:63) 在 org.jboss.weld.executor 的 org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:66) .IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:56) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util .concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor 调用(IterativeWorkerTaskFactory.java:56) $Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor 调用(IterativeWorkerTaskFactory.java:56) $Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)

就像 Weld 无法查找生成的类一样。beans.xml已经在以下创建src/test/resources/META-INF/beans.xml

谁能指出我解决这个问题的方法?我已经搜索过类似的东西,但没有成功。

0 投票
3 回答
15745 浏览

java - Mapstruct - 在响应中发送具有(一对多关系)的嵌套实体

我有 2个具有一对多关系的实体CallRecordsCallRecordOperators ,如下所示

因此,如果用户要求所有“CallRecords”数据,我还必须提供“CallRecordOperators”,因为它们是相关的。

Mapper 和 DTO 的当前代码

但是对于上面的代码,我得到了

运算符数组的值为空。他可能是什么问题?

0 投票
1 回答
5876 浏览

java - MapStruct 不映射某些属性

Mapstruct 在编译阶段向我抛出了下一个错误:

ConfigsMapperImpl 不是抽象的,不会覆盖抽象方法 toConfigs(ConfigsDTO)

同时 MapStruct 可以很好地为所有其他方法生成代码。

我想这是因为Configobject 的字段比ConfigsDTO.

0 投票
3 回答
1359 浏览

mapstruct - mapstruct 是否适用于 JPA 元模型类?

我收到编译错误:

但是,当我删除 mapstruct 注释处理器时,它编译得很好。

所以我认为 mapstruct 在生成类之前正在扫描它们?有什么解决方案吗?