Я использую Orika mapper, чтобы избежать шаблонных конвертеров и у меня есть интересная проблема.
Чтобы упростить разработку, мне нужно создать аннотацию, которая будет определять, когда отображать значение, а когда оставить его как есть (не ноль или значение по умолчанию, просто как есть).
Представьте, что у нас есть 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 mapper на чтение этой аннотации из необходимых классов и настроить динамическое отображение в зависимости от этого.
Здесь важно то, что я не могу использовать default (пустую или пустую строку), потому что мне нужно оставить целевое значение как есть, если проверка не удалась «Как есть» означает либо значение, которое находится в существующем целевом объекте, либо значение класса по умолчанию (установлено как public String name = "My name";
)
Я знаю, как получать аннотации из полей, и теперь это работает, но вопросы:
Что я должен использовать : преобразователь уровня поля или настройка на уровне класса?
Есть ли способ избежать отражения в настройках значения поля внутри этих пользовательских преобразователей / картографов?