问题标签 [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 投票
1 回答
3974 浏览

mapstruct - Mapstruct 中是否有一个全局设置会在将字符串值设置为目标 bean 属性之前对其进行修剪

是否可以在针对目标 bean 中字符串类型的 bean 属性设置字符串值之前对其进行修剪?

推土机通过其映射配置提供了这样的设施,例如,

另请参阅推土机全局配置

使用 MapStruct 1.0.0.Final 我可以通过ExpressionsBefore/After Mapping custom 来实现这一点。

但想知道是否有更好的方法来处理此类用例。

提前致谢。

0 投票
3 回答
6770 浏览

java - 在 mapstruct 中使用构建器(使用不可变注释处理器)将对象映射到不可变对象

我们正在使用不可变框架来生成所有 DTO。现在我们想用mapstruct将这些对象映射到另一个对象。但是生成的 DTO 是不可变的,没有设置器和构造器,对应于构建器模式。它们仅通过静态方法访问的相应构建器填充builder()

相反,我们尝试将 DTO1 映射到 DTO2.Builder,如果 mapstruct 可以识别 Builder 中的设置器,但它们没有 void 返回类型,而是返回 Builder 本身以进行流畅的连接,这将起作用。

所以这里是示例的代码。

我们有两个接口

然后我们有 mapstruct 的 Mapper 接口:

为了让 mapstruct 找到 Builder,我们需要一个工厂:

为了生成代码,编译器插件被指示使用两个注释处理器:

注意:这仅适用于 mapstruct 版本 > 1.2.x。旧版本在干净的构建 ( mvn clean compile) 中存在问题,即他们找不到刚刚构建的不可变源。在第二次构建(没有清理)中,他们会找到不可变实现,因为它们在注释处理器运行之前就在类路径上。此错误现已修复。

这就像一个魅力。首先生成接口的不可变实现,mapstruct 使用它们来生成构建器。

但是测试表明没有设置任何属性:

断言失败。看一下 mapstruct 生成的映射器,它显然没有找到任何 setter:

返回空的构建器。我认为原因是生成的构建器的 setter 实现,因为它返回自身以创建流畅的 API:

有没有办法让 mapstruct 找到这些设置器?或者甚至是一种更好的方式来处理这些不可变对象与构建器?

编辑:正如我在评论中所说,我遇到了问题 #782。在 1.2.0.Beta3 版本中仍然不支持构建器。但是有几个关于这个话题的讨论,所以如果有人遇到同样的问题,关注这个问题可能会很有趣。

0 投票
1 回答
6303 浏览

mapstruct - MapStruct 生成代码

我正在根据参考指南学习使用 MapStruct。日食版本是

面向 Web 开发人员的 Eclipse Java EE IDE。版本:Kepler Service Release 2

在此处输入图像描述

pom.xml如下,与参考指南相同

它说在构建项目时会生成实现代码。但是,它似乎没有在target/generated-sources文件夹下生成

0 投票
5 回答
64341 浏览

spring - Mapstruct - 如何在 Generated Mapper 类中注入 spring 依赖项

我需要在生成的映射器实现中注入一个spring服务类,这样我就可以通过

这适用于 Mapstruct-1.0 吗?

0 投票
4 回答
3692 浏览

intellij-idea - Intellij IDEA 中的 mapstruct 和 gradle 配置问题

我有一个使用 gradle 的项目,并将 mapstruct 作为依赖项之一。每次我尝试构建项目时,它都失败了。我猜是因为 Mapstruct 会生成 gradle 找不到的 impl 类。谁能帮助我如何在 intellij IDEA 中进行配置?

谢谢

0 投票
1 回答
4924 浏览

mapstruct - 地图结构列表列出具有不同的属性

我必须将列表映射到具有不同属性名称的列表。

前任:

我没有写我在哪里得到 Object1List 来简化。(我在一个方法的不同类中得到它)

我一直在尝试这个,但 mapstruct 抱怨 object1List 是未知属性。有没有办法我可以做到这一点?帮助表示赞赏。

0 投票
2 回答
35921 浏览

spring - Mapstruct 中的嵌套映射

我是 MapStruct API 的新手,任何人都可以说如何进行嵌套映射。我有两个类,一个是我实际的 purchaseOrder 类,它被称为我的目标类,另一个是 EDPurchaseOrder 类,它被称为源文件,这里不用担心我使用的命名约定,只需使用源文件和目标文件即可。

源类
源类 EDCustomerOrder 及其引用类

目标类
这里我的目标类 CustomerOrder 及其参考类

0 投票
1 回答
855 浏览

java - 在 IDEA 上的 Mapstruct 中生成的源映射器的编码问题

我正在使用 Mapstruct 为我的实体生成 dto 对象。我在笔记本电脑上的土耳其语 Windows 10 上使用 IntelliJ。我的问题如下。

如您所见,变量名称创建为 ı 而不是 i。如果我尝试部署或制作模块。它失败了,类中的所有 ı 字符都变为“?” 喜欢以下。.

我尝试将文件和整个项目的编码设置为 UTF-8(设置 -> 文件编码)。但它没有用。

第一个场景的 Maven 看起来像这样。

然后我将Maven配置更改为以下。我设法用 i 而不是 ı 生成映射器类。但是在 make 模块上它失败并且类中的所有 i 字符都更改为?。

更有趣的是,为了测试它,我创建了一个示例项目,其中仅包含映射器依赖项以及一个对象和 DTO(ITestObject)。我把它给了我的同事。他的 Java 和 Intellij 版本完全相同,并且还在他的笔记本电脑上安装了 windows 10 土耳其语。我们将 -J-Dfile.encoding=UTF-8 更改为 -J-Dfile.encoding=windows-1254。构建成功后,他制作的模块没有任何问题。文件没有损坏。以防万一重新编译模块,他也像我一样损坏了 Mapper 文件。但是使用相同的配置我无法在 Maven 中构建访问后成功地制作模块。我也尝试设置 MAVEN_OPTS

-Dfile.encoding=UTF-8 -Duser.country=TR -Duser.language=es -Duser.variant=Traditional_WIN

但不幸的是它没有工作。我认为,问题在某种程度上与 IntelliJ 的操作系统有关。我正在使用 IDEA 2016.2.3、Maven 3.3.9。有人知道它为什么会发生或它可能与什么有关吗?提前致谢。

0 投票
2 回答
2567 浏览

java - 如何在 Java 中将双向实体映射到 DTO

有人可以帮我解决这个问题吗?我尝试使用 mapstruct,它工作得很好,但仅适用于没有双向关系的实体。

例如我有实体:

DTO:

当我尝试将它们映射到 dto 时,由于这种双向关系,我得到了 StackOverflowError。

知道如何解决这个问题吗?我也会接受不使用 mapstruct 的解决方案。

如果需要任何详细信息,请告诉我。谢谢!

0 投票
1 回答
6035 浏览

java - MapStruct 泛型 Map 和 map 子对象的组合列表

我有作为父类:User.java和 2 个类:FacebookUser.java它们TwitterUser.java是返回的实体,取决于使用数据库中的类型列DiscriminatorColumn,我想编写正确的映射器来映射可能是 FacebookUser 或 TwitterUser 实例的用户。我有以下似乎无法按预期工作的映射器,仅映射User父级而不是子级:

然后我使用:

要映射的类:

DTO:

此外,如果我有与 Facebook 用户和 Twitter 用户或基本用户混合的用户列表:

假设我有以下用户:

我只得到firstNameandlastName但没有screenNameor userId

有什么解决办法吗?