问题标签 [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.
mapstruct - Mapstruct 中是否有一个全局设置会在将字符串值设置为目标 bean 属性之前对其进行修剪
是否可以在针对目标 bean 中字符串类型的 bean 属性设置字符串值之前对其进行修剪?
推土机通过其映射配置提供了这样的设施,例如,
另请参阅推土机全局配置
使用 MapStruct 1.0.0.Final 我可以通过Expressions 或Before/After Mapping custom 来实现这一点。
但想知道是否有更好的方法来处理此类用例。
提前致谢。
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 版本中仍然不支持构建器。但是有几个关于这个话题的讨论,所以如果有人遇到同样的问题,关注这个问题可能会很有趣。
spring - Mapstruct - 如何在 Generated Mapper 类中注入 spring 依赖项
我需要在生成的映射器实现中注入一个spring服务类,这样我就可以通过
这适用于 Mapstruct-1.0 吗?
intellij-idea - Intellij IDEA 中的 mapstruct 和 gradle 配置问题
我有一个使用 gradle 的项目,并将 mapstruct 作为依赖项之一。每次我尝试构建项目时,它都失败了。我猜是因为 Mapstruct 会生成 gradle 找不到的 impl 类。谁能帮助我如何在 intellij IDEA 中进行配置?
谢谢
mapstruct - 地图结构列表列出具有不同的属性
我必须将列表映射到具有不同属性名称的列表。
前任:
我没有写我在哪里得到 Object1List 来简化。(我在一个方法的不同类中得到它)
我一直在尝试这个,但 mapstruct 抱怨 object1List 是未知属性。有没有办法我可以做到这一点?帮助表示赞赏。
spring - Mapstruct 中的嵌套映射
我是 MapStruct API 的新手,任何人都可以说如何进行嵌套映射。我有两个类,一个是我实际的 purchaseOrder 类,它被称为我的目标类,另一个是 EDPurchaseOrder 类,它被称为源文件,这里不用担心我使用的命名约定,只需使用源文件和目标文件即可。
源类
源类 EDCustomerOrder 及其引用类
目标类
这里我的目标类 CustomerOrder 及其参考类
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。有人知道它为什么会发生或它可能与什么有关吗?提前致谢。
java - 如何在 Java 中将双向实体映射到 DTO
有人可以帮我解决这个问题吗?我尝试使用 mapstruct,它工作得很好,但仅适用于没有双向关系的实体。
例如我有实体:
和
DTO:
当我尝试将它们映射到 dto 时,由于这种双向关系,我得到了 StackOverflowError。
知道如何解决这个问题吗?我也会接受不使用 mapstruct 的解决方案。
如果需要任何详细信息,请告诉我。谢谢!
java - MapStruct 泛型 Map 和 map 子对象的组合列表
我有作为父类:User.java
和 2 个类:FacebookUser.java
它们TwitterUser.java
是返回的实体,取决于使用数据库中的类型列DiscriminatorColumn
,我想编写正确的映射器来映射可能是 FacebookUser 或 TwitterUser 实例的用户。我有以下似乎无法按预期工作的映射器,仅映射User
父级而不是子级:
然后我使用:
要映射的类:
DTO:
此外,如果我有与 Facebook 用户和 Twitter 用户或基本用户混合的用户列表:
假设我有以下用户:
我只得到firstName
andlastName
但没有screenName
or userId
。
有什么解决办法吗?