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/