Я использую картограф Orika, чтобы избежать шаблонных конвертеров, и у меня есть интересная проблема. Чтобы упростить разработку, мне нужно создать аннотацию, которая будет определять, когда отображать значение, а когда оставить его как есть (не нуль или значение по умолчанию, а как есть).
Представьте, что у нас есть 2 класса:
class Dto {
public int id;
public String name;
}
class Entity {
public int id;
public String name;
}
Dto исходит от Front-end, и мы хотим сопоставить имя поля с сущностью, только если оно начинается с чего-то вроде:
if {dto.name.startsWith("A")}
entity.name = dto.name;
И нам нужна подобная логика во многих классах - меняется только начальная строка.
Поэтому я хочу создать аннотацию @IfStartsWith(String startsWith)
и сделать следующее:
class Entity{
public int id;
@IfStartsWith("A")
public String name;
}
При запуске проекта я хочу настроить картограф Orika, читающий эту аннотацию из необходимых классов, и настроить поведение динамического сопоставления в зависимости от этого.
Здесь важно то, что я не могу использовать значение по умолчанию (нулевую или пустую строку), потому что мне нужно оставить целевое значение как есть, если проверка не пройдена. «Как есть» означает либо значение, которое находится в существующем целевом объекте, либо значение класса по умолчанию (установленное как public String name = "My name";
).
Я знаю, как получить аннотации из полей, и теперь это работает, но есть вопросы:
Что следует использовать: преобразователь на уровне поля или настройку на уровне класса?
Есть ли какой-либо способ избежать отражения в настройке значения поля внутри этих настраиваемых преобразователей/сопоставителей?