java - ModelMapper 将数组属性 (get(0)) 展平为字符串?

标签 java modelmapper

Src 对象有一个属性:

private List<Pojo> goals;

目标对象有一个属性

private String goal;

我想映射 Src.goals.get(0).getName() -> Dest.goal。目标将始终包含一个项目,但必须将其作为列表拉入,因为它来自 Neo4j。

我尝试这样做:

    userTypeMap.addMappings(mapper -> {
        mapper.map(src -> src.getGoals().get(0).getName(), UserDto::setGoal);
    });

但是 modelmapper 不喜欢这个参数。然后我尝试了:

    userTypeMap.addMappings(mapper -> {
        mapper.map(src -> src.getGoals(), UserDto::setGoal);
    });

这给了我:

"goal": "[org.xxx.models.Goal@5e0b5bd8]",

然后我尝试为 List -> String 添加转换器,但没有被调用。如果我将整个 pojo 添加到 dto 的转换器,那么我必须映射整个 pojo,但我不想这样做,我只想覆盖这个属性。

最佳答案

您可以将 List 访问包装在 Converter 中,并在 PropertyMap 中使用它,如下所示:

ModelMapper mm = new ModelMapper();
Converter<List<Pojo>, String> goalsToName = 
    ctx -> ctx.getSource() == null ? null : ctx.getSource().get(0).getName();
PropertyMap<Src, Dest> propertyMap = new PropertyMap<>() {
    @Override
    protected void configure() {
        using(goalsToName).map(source.getGoals()).setGoal(null);
    }
};
mm.addMappings(propertyMap);

关于java - ModelMapper 将数组属性 (get(0)) 展平为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59430916/

相关文章:

java - 字符串连接上的特定类型的哈希

java - 交换按钮在android中的位置

java - org.modelmapper 中的标记化

java - 与提供者和不可变对象(immutable对象)的深度映射

java - volatile 同步组合以提高性能

java - 尽管显示值从方法 block 内部更改,但从 setter 设置私有(private)值 "balance"时出错

java - Socket AsyncTask 不会在代码中记录 socket.isConnected 值

java - ModelMapper JUnit Mockito 抛出 NullPointerException

java - 当我将 Java 版本升级到 openJDK 11 时,加载模型映射器配置时出现 nullpointerException

java - 如何使用 ModelMapper 将外键从 dto 映射到实体对象?