【发布时间】:2019-08-21 18:37:57
【问题描述】:
我正在使用 Orika 映射器来避免样板转换器并遇到一个有趣的问题。 为了简化开发,我需要创建一个 Annotation 来确定何时映射值以及何时保持原样(不是 null 或默认值,就这样)。
假设我们有 2 个类:
class Dto {
public int id;
public String name;
}
class Entity {
public int id;
public String name;
}
Dto 来自前端,我们希望仅当字段名称以以下内容开头时才将其映射到实体:
if {dto.name.startsWith("A")}
entity.name = dto.name;
而且我们在很多类中都需要类似的逻辑——只是改变了起始字符串。
所以我想创建注释@IfStartsWith(String startsWith) 并执行以下操作:
class Entity{
public int id;
@IfStartsWith("A")
public String name;
}
在项目启动时,我想配置 Orika 映射器,从所需的类中读取此注释并根据此设置动态映射行为。
这里重要的是我不能使用默认值(null 或空字符串),因为如果检查失败,我需要保持目标值不变。 “按原样”表示现有目标对象中的值或类默认值(设置为public String name = "My name";)
我知道如何从字段中获取注释并且它现在可以工作,但问题是:
我应该使用什么:字段级转换器还是类级自定义?
有什么方法可以避免这些自定义转换器/映射器中的字段值设置反射?
【问题讨论】: