使用ModelMapper

时间:2017-07-26 13:27:04

标签: java modelmapper

我正在评估ModelMapper library以映射项目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。但由于这是一个不明确的解决方案,我想了解是否有更好的解决方案来解决这个使用ModelMapper

另一个解决方案是添加到我的实体/ dto方法public String getStatus() { return "ACTIVE"; }。但我真的想在映射器上保留所有硬编码值。

0 个答案:

没有答案