问题标签 [modelmapper]

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 回答
1396 浏览

java - Java ModelMapper 平面模型到层次模型

我正在使用www.modelmapper.org并且我正在将相同的“平面”java DTO 映射到几个“分层”DTO。
“平面” DTO 具有许多原始属性。
“分层”有许多复杂类型,其中包含许多原始类型。这些 DTO 非常相似,但又不相同。

“扁平” DTO:

“分层 DTO:

TransactionRequest 应映射为 1) PurchaseRequest 和 2) CancelRequest。
问题之一是,金额必须从 Long(以次要单位)转换为 BigDecimal(以带十进制数字的主要单位)。我通过编写自己的 Long 到 BigDecimal 转换器来实现这一点。现在我遇到了以可重用方式定义所需映射的问题。我不想要的是为每个目标类型定义映射,如下所示:

我只想一次定义 Amount DTO 的映射(以及所有其他子类型映射,例如 PosInfo 等等),然后重新使用这些映射。我尝试了几个选项:

我尝试的第一件事是在我的 ModelMapper 中声明 TransactionRequest 到 Amount DTO 的映射。首先,我假设简单地声明这个映射就足以在将 TransactionRequest 映射到 PurchaseRequest 时使用映射机制。然而事实并非如此。

我尝试的第二件事确实有效,但似乎过于复杂:

  1. 我为 TransactionRequest 到 Amount 的映射创建了一个 PropertyMap。
  2. 我创建了一个自定义转换器 TransactionRequest 到 Amount。此转换器在其构造函数中需要一个 ModelMapper。我传递给构造函数的 ModelMapper 是从 1) 创建 PropertyMap 的 ModelMapper
  3. 我在 PurchaseRequest 和 CancelRequest 的 PropertyMaps 中使用这个转换器

这是代码:

有没有人知道更简单的方法?

0 投票
3 回答
4837 浏览

java - ModelMapper:在运行时映射抽象类

我正在使用 ModelMapper 框架 ( http://modelmapper.org/ ) 在 Java 中映射对象。我在映射包含抽象类的具体类(DTO 到实体)时遇到了问题。

示例:Task 有一个 AbstractItems 列表。
AbstractItems 是问题和标准。

映射方法:

ModelMapper 尝试创建一个新的 AbstractItem 实例,这会引发异常。有没有办法在运行时映射抽象类?
像 QuestionDTO -> Question, CriteriaDTO ->Criteria

0 投票
1 回答
3863 浏览

java - ModelMapper 处理 java 8 可选字段为可选

我一直在应用程序中使用 modelmapper 和 java 8 Optionals,它们工作正常,因为它们是原始类型;直到我将模型对象的一个​​字段更改为可选类型。然后所有的地狱都崩溃了。事实证明,许多库不能很好地处理泛型。

这是结构

当我尝试映射MyObjectDto到时MyObject,modelmapper 调用

with Optional<MySubObjectDto>,我不明白这怎么可能(它们之间没有继承)。当然,崩溃很快。现在我已经将我的设置器更改为接受 Dto 类型只是为了生存下来,但这从长远来看是行不通的。有没有更好的方法来解决这个问题,还是我应该制造一个问题?

0 投票
1 回答
2333 浏览

java - 从多平面对象到层次对象的 ModelMapper 映射

我有一种情况,我需要使用ModelMapper将多个对象(在平面结构中)映射到 Java 中的一个对象(层次结构对象)中。

例如,

我想从模型映射器中得到的是

有没有办法简单地实现这一点?

谢谢

0 投票
1 回答
3258 浏览

java - ModelMapper 在运行时更改泛型类型 - 奇怪的行为

我在 Java 中面临一个非常奇怪的行为。我有两个没有层次结构连接的不同类:类模板(类型层次结构是 Object -> A -> B -> Template)和类 TemplateDto(Object -> TemplateDto)。

我正在使用 ModelMapper (org.modelmapper.ModelMapper) 在两个类之间进行映射(由于字段名称相同,因此使用默认映射)。

有以下代码:

最后一行抛出:

这很奇怪。当我调试这一部分时,我看到映射后,resultDtos 是 List 类型的列表,而不是 List,这让我大吃一惊。

我试图清理我的tomcat,maven clean install,但它仍然会发生。

有任何想法吗?

0 投票
2 回答
3301 浏览

java - ModelMapper:解决这个问题的最佳方法是什么

我有ModelMapper图书馆的问题。

实体类:

Dto类:

我如何模拟问题:

预期的:

无效的

jhonatan.serafim

1

实际的:

1

jhonatan.serafim

1

解决这个问题的最佳方法是什么?

0 投票
0 回答
558 浏览

java - modelmapper-jooq 和处理“空”字段

我正在使用 modelmapper-jooq 将 jOOQ 记录映射到自定义 pojo。假设我有这样的表

所以 second_name 可以是null. 我的人 POJO 看起来像:

当我映射Result<Record>Collection<Person>时,此集合中的每个元素的 secondName 都相等null。当我只映射前两行时,一切正常。如何正确处理,所以 secondName 字段null仅在数据库中的对应字段为时null?我检查了 Record 实例中的字段是否具有正确的值。我以这种方式配置模型映射器:

我也在做如下映射:

0 投票
1 回答
3705 浏览

java - 使用 ModelMapper 时,如何为源类上的特定属性指定自定义映射?

具体来说,我想将我的 Source 类 ( PurchaseOrderFilterViewModel) 中的 String 转换为org.joda.time.LocalDate我的 Destination 类 ( PurchaseOrderFilter) 中的一个。

我尝试PropertyMap<Source, Destination>按照文档使用,但它不起作用。当 null 作为构造函数参数传入时,Destination 类中的日期总是分配给当前日期,这是默认的 LocalDate。

0 投票
1 回答
3010 浏览

java - 使用 modelmapper 映射 2 个集合类型

我正在开发 Spring 应用程序,对于对象映射,我正在使用 ModelMapper 库。

我能够映射基本类映射,但是当我尝试映射 2 个集合元素时,源是一组带有附加属性(如名称和描述)的枚举,而目标是具有 id、名称和描述的 pojo。

我已经在映射配置文件中尝试过 typemap 和转换器,但我遇到了 mapper 的例外。

并且源类来自其他应用程序(其依赖项已添加到 pom.xml 中)。我也不希望源类型作为目标设置器中的参数。

前任。

资源:

源枚举:

0 投票
0 回答
355 浏览

modelmapper - ModelMapper Provider 在映射的第一级属性上被忽略

我已经在 ModelMapper 转换中成功使用了提供程序,但我偶然发现了一个奇怪的情况。我注意到 Provider 仅被考虑用于转换的“第一级”之外的对象,例如:我有两个层次结构:第一个)TipoConsultarProcessoResposta、TipoProcessoJudicial 和 TipoDocumento 第二个)ConsultarProcessoResposta、ProcessoJudicial 和 Documento TipoConsultarProcessoResposta 有一个 TipoProcessoJudicial依次有一个 TipoDocumento 列表,第二个层次结构类似于第一个层次结构。我正在从第一个层次结构转换到第二个层次结构,并且提供程序对于从 TipoDocumento 到 Documento 的转换工作正常,但是对于从 TipoProcessoJudicial 到 ProcessoJudicial 的转换,它被忽略了。

这是代码的相关部分:

DocumentoPropertyMap extends PropertyMap<TipoDocumento, Documento> and ProcessoJudicialPropertyMap extends PropertyMap<TipoProcessoJudicial, ProcessoJudicial>.

问题是 DocumentoProvider 被调用但 ProcessoJudicalProvider 没有被调用。ModelMapper 尝试调用一个也失败的全局提供程序,并通过构造函数进行实例化。