【发布时间】:2020-02-12 16:09:57
【问题描述】:
给定一组五个对象:
KeyDto{String id}
ValueDto{String name, String value, String description}
Key{String id, String name}
Value{String value, String description}
Target{Key key, Value value}
我想创建一个有两个参数的映射器:
Target dtosToTarget(KeyDto keyDto, ValueDto valueDto);
然而,仅仅为 Key 和 Value 定义辅助方法似乎是不够的:
@Mapping(source = "keyDto.id", target = "id")
@Mapping(source = "valueDto.name", target = "name")
Key keyDtoAndValueDtoToKey(KeyDto keyDto, ValueDto valueDto);
Value valueDtoToValue(ValueDto valueDto);
这会导致实际的 dtosToTarget 方法出错:
错误:(17, 19) java: 无法将属性“java.lang.String value”映射到“mapping.Value value”。考虑声明/实现一个映射方法:“mapping.Value map(java.lang.String value)”。
我能想到的唯一解决方案是定义自定义 java 表达式来调用必要的方法,例如
@Mapping(target = "key", expression = "java(keyDtoAndValueDtoToKey(keyDto, valueDto))")
@Mapping(target = "value", expression = "java(valueDtoToValue(valueDto))")
有更清洁的方法吗?
【问题讨论】: