使用 ModelMapper 映射硬编码值

问题描述 投票:0回答:1

我正在评估 ModelMapper 库 以映射项目 DTO 和实体。尽管该库非常强大,但我找不到将硬编码值从实体映射到其 DTO 表示的方法。

ModelMapper,将源类的方法映射到目标类的方法。例如:

modelMapper.createTypeMap(MyEntity.class, MyDTO.class)
    .addMappings(mapper -> mapper.map(MyEntity::getName, MyDTO::setFirstName))
    .addMappings(mapper -> mapper.map(MyEntity::getSurname, MyDTO::setLastName))

但是我在 DTO 上有一个属性,它还没有出现在实体端。使用 Spring 转换器类,此映射始终由像这样的硬编码值完成

dto.setStatus("ACTIVE");
。但是使用 ModelMapper 我无法弄清楚如何正确地做到这一点。我的第一次尝试是这样的:

    .addMappings(mapper -> mapper.map(s -> {return "ACTIVE";}, MyDTO::setStatus))

但是,上面的映射不起作用,因为 ModelMapper 期望从源映射

get
方法。因此,返回无效,实际上上面的代码会导致运行时错误。

一个可能的解决方案,这是非常丑陋的,是用像这样的

using
助手强制期望的结果:

addMappings(mapper -> mapper.using(c -> "ACTIVE").map(MyEntity::getName, MyDTO::setStatus)); 

在这种情况下,

getName
方法只是用来提供一个
get
方法,而实际值将被
ACTIVE
替换。但由于这是一个不清楚的解决方案,我想了解是否有更好的解决方案来解决这个using ModelMapper

另一个解决方案是将我的实体/d 添加到方法

public String getStatus() { return "ACTIVE"; }
。但我真的很想在映射器上保留所有硬编码值。

java modelmapper
1个回答
0
投票

这太老了,但是...

这对我有用:

this.mapper.typeMap(MyEntity.class, MyDTO.class)
        .addMapping(src -> "ACTIVE", MyDTO::setStatus);

注:addMapping VS addMappings

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