Почему Mapstruct всегда создает экземпляр целевого класса при сопоставлении вложенных компонентов?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Почему Mapstruct всегда создает экземпляр целевого класса при сопоставлении вложенных компонентов?

Сообщение Anonymous »

Я использую MapStruct и у меня есть отображение вложенных компонентов. Моя проблема в том, что я не хочу, чтобы в моем целевом классе создавались пустые объекты.
Есть ли способ сказать MapStruct не создавать экземпляры каких-либо целевых членов перед выполнением сопоставления? Или, может быть, установить для свойства значение null?
Вот мой пример:
Исходный класс:

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

public class Source {
private String v;
protected List agrp;
// some getter and setter
}

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

public class SourceAType {
private String a;
// some getter and setter
}
Целевой класс:

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

public class Target {

private String v;
private TargetANt targetANt;
// some getter and setter
}

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

public class TargetA {
private String A20;
// some getter and setter
}

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

public class TargetANt {
protected TargetA[] array;
// some getter and setter
}
Определение картографа:

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

@Mapper
public abstract class SourceToTargetMapper {
@Mapping(source = "v", target = "v")
@Mapping(source = "agrp", target = "targetANt.array")
public abstract Target mapSourceToTarget(Source input);
}
Он создает этот метод сопоставления:

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

 protected TargetANt sourceToTargetANt(Source source) {
if ( source == null ) {
return null;
}
TargetANt targetANt = new TargetANt(); // Here are my problem
if ( source.getAgrp() != null ) {
targetANt.setArray( sourceATypeListToTargetAArray( source.getAgrp() ) );
}
return targetANt;
}
Как вы можете видеть в скомпилированном методе Mapstruct, я всегда получаю пустой TargetANt.
Конечно, я могу использовать @ObjectFactory, чтобы генерировать TargetAnt только в том случае, если source.getAgrp() пуст. Однако я говорю о большом количестве сопоставлений, и создавать это для каждого из них было бы излишним. Поддерживать код будет сложно.
Я пробовал NullValueCheckStrategy.ALWAYS. «Он делает то, что должен, но целевой класс уже создан».

Подробнее здесь: https://stackoverflow.com/questions/791 ... an-mapping
Ответить

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

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

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

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

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