Как узнать, создан ли картограф для двух классов в Orika?

Итак, я пишу телематическое приложение, и мы медленно создаем картографы для DTO. Скоро будет более 100, но сейчас у нас 3. Мы хотим отправить все сообщения нашему картографу, но когда мы это делаем, а Orika не знает об этом, он выдает исключение.

Мне нужен метод .isMapperAvailable(class, class), но я не могу его найти. Я нашел .existsRegisteredMapper(Type, Type), но не могу понять, как он работает. Любая помощь?


person markthegrea    schedule 30.11.2015    source источник


Ответы (2)


Я думаю, вы могли бы использовать это так:

MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();

ClassMapBuilder<Foo, Bar> map = mapperFactory.classMap(Foo.class, Bar.class);

Type<Foo> fooType = map.getAType();
Type<Bar> barType = map.getBType()

boolean exists = mapperFactory.existsRegisteredMapper(fooType, barType, false);
person uzilan    schedule 30.11.2015
comment
Это работает, но довольно грязно. Спасибо за отзыв, но я надеюсь на что-то лучшее... - person markthegrea; 30.11.2015
comment
Вам не нужно создавать карту классов, чтобы получить тип класса, просто используйте TypeFactory.valueOf - person Sidi; 01.12.2015
comment
Бинго! this.mf.existsRegisteredMapper(TypeFactory.valueOf(from.getClass()), TypeFactory.valueOf(to), false); Это прекрасно работает. Спасибо @SidiMohamed! - person markthegrea; 01.12.2015

В методе existsRegisteredMapper() есть один недостаток. Предположим, вы хотите использовать другой тип отображения для A в B и B в A. В этом случае этот метод возвращает true для обоих вызовов метода:

mapperFactory.existsRegisteredMapper(A, B, true);

mapperFactory.existsRegisteredMapper(B, A, true);
person Abhishek    schedule 14.08.2017