Как убедиться, что Mapstruct использует метод, аннотированный с @ObjectFactoryJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как убедиться, что Mapstruct использует метод, аннотированный с @ObjectFactory

Сообщение Anonymous »

Я хочу стандартизировать свои процессы картирования, чтобы следовать конкретной схеме. Поэтому я представил несколько общих интерфейсов, которые помогают уменьшить усилия при написании новых карт для новых типов. Вот интерфейс для типов: < /p>

Код: Выделить всё

import lombok.NonNull;

public interface MappableCyclic
{
void beforeMapping(@NonNull IN in, @NonNull OUT out, @NonNull ReferenceCycleTracking context);
void  afterMapping(@NonNull IN in, @NonNull OUT out, @NonNull ReferenceCycleTracking context);
}
< /code>
ReferenceCycleTracking
является типичной реализацией для контекста Mapstruct, чтобы избежать бесконечной рекурсии при сопоставлении объектов с циклическими зависимостями. В дополнение к этому существует общий супер интерфейс для картинов: < /p>

Код: Выделить всё

public interface MappableCyclicMapper
{
@NonNull OUT map(@NonNull IN in, @NonNull @Context ReferenceCycleTracking context);

@BeforeMapping default void beforeMapping(
@NonNull                IN                     in,
@NonNull @MappingTarget OUT                    out,
@NonNull @Context       ReferenceCycleTracking context)
{
out.beforeMapping(out, in, context);
}

@AfterMapping default void afterMapping(
@NonNull                IN               in,
@NonNull @MappingTarget OUT              out,
@NonNull @Context ReferenceCycleTracking context)
{
out.afterMapping(out, in, context);
}

@NonNull Class outType();
@NonNull OUT        create(IN in);

/**
* object factory should be called by mapstruct during generated {@link #map(MappableCyclic, ReferenceCycleTracking)}
* implementation
*/
@ObjectFactory default @NonNull OUT lookupOrCreate(@NonNull IN in, @NonNull ReferenceCycleTracking context)
{
OUT out = context.get(in, outType());
if (out == null)
{
out = create(in);
context.put(in, out);
}
return out;
}
}
< /code>
And finally here is the mapper interface for two of my mappable types:
@Mapper interface Map_TaskGroup_EntityDTO_EntityJPA extends MappableCyclicMapper
{
Map_TaskGroup_EntityDTO_EntityJPA INSTANCE = Mappers.getMapper(Map_TaskGroup_EntityDTO_EntityJPA.class);

@NonNull TaskGroupEntityJPA map(@NonNull TaskGroupEntityDTO input, @NonNull @Context ReferenceCycleTracking context);

@Override default @NonNull Class outType() { return TaskGroupEntityJPA.class; }

@Override default @NonNull TaskGroupEntityJPA create(TaskGroupEntityDTO in) { return new TaskGroupEntityJPA(in.name()); }

@ObjectFactory
@Override default @NonNull TaskGroupEntityJPA lookupOrCreate(
@NonNull TaskGroupEntityDTO taskGroupEntityDTO, @NonNull ReferenceCycleTracking context)
{
return MappableCyclicMapper.super.lookupOrCreate(taskGroupEntityDTO, context);
}
}
< /code>
I expected that mapstruct would use the @ObjectFactory
Метод, предоставленный в супер -интерфейсе, но это не так, поэтому я пытался помочь MapStruct с помощью дополнительного метода завода объекта в приведенном выше подключении. Однако реализация для этого интерфейса, сгенерированного Mapstruct, игнорирует методы фабрики моего объекта: < /p>
@Override
public TaskGroupEntityJPA map(TaskGroupEntityDTO input, ReferenceCycleTracking context) {
TaskGroupEntityJPA target = context.get( input, TaskGroupEntityJPA.class );
if ( target != null ) {
return target;
}

if ( input == null ) {
return null;
}

String name = null;

TaskGroupEntityJPA taskGroupEntityJPA = new TaskGroupEntityJPA( name );

context.put( input, taskGroupEntityJPA );
beforeMapping( input, taskGroupEntityJPA, context );

afterMapping( input, taskGroupEntityJPA, context );

return taskGroupEntityJPA;
}
< /code>
How can I make sure that my object factory methods are not ignored any longer?

Подробнее здесь: https://stackoverflow.com/questions/795 ... ectfactory
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как убедиться, что Mapstruct использует метод, аннотированный с @ObjectFactory
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как убедиться, что Mapstruct использует метод, аннотированный с @ObjectFactory
    Anonymous » » в форуме JAVA
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Как убедиться, что Mapstruct использует метод, аннотированный с @ObjectFactory
    Anonymous » » в форуме JAVA
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Неаннотированный метод переопределяет метод, аннотированный @NotNull
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Я создаю веб-сайт и хочу убедиться, что он отзывчив. Как мне убедиться, что мой веб-сайт правильно адаптируется к экрана
    Anonymous » » в форуме CSS
    0 Ответы
    142 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»