Проблема с вложенными классами Mapstruct MappingJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с вложенными классами Mapstruct Mapping

Сообщение Anonymous »

У меня проблема с определением сопоставления. Надеюсь, вы подскажете, как это исправить.
Моя первоначальная ситуация такова: у меня есть классы со вложенными классами. Большинство атрибутов вложенного во входные данные класса можно напрямую сопоставить с целевым вложенным классом. Но один атрибут вложенного во входные данные класса должен быть напрямую сопоставлен с классом taget.
Это мой код:

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

public class Input {

public String aa;
public NestedClass nestedMember;

public static class NestedClass {
public String ab;
public String ac;
public String ad;
public String ae;
}
}

public class Target {

public NestedClass nestedMember;

public static class NestedClass {
public String ba;
public String bb;
public String bc;
public String bd;
}
}

@Mapping(target = "nestedMember.ba", source = "aa")
@Mapping(target = "nestedMember", source = "nestedMember")
Target map(Input input);

@Mapping(target = "bb", source = "ab")
@Mapping(target = "bc", source = "ac")
@Mapping(target = "bd", source = "ad")
@Mapping(target = "ba", ignore = true)
NestedClass mappingNested(test.Input.NestedClass nestedClass);
Я предполагал, что Mapstruct будет использовать метод MappingNested для сопоставления вложенного класса, а затем прямое сопоставление атрибутов aa сnestedMember.ba.
Но сгенерированный класс выглядит так:

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

public class MyMapperImpl implements MyMapper {

@Override
public Target map(Input input) {
if ( input == null ) {
return null;
}

Target target = new Target();

if ( input.nestedMember != null ) {
if ( target.nestedMember == null ) {
target.nestedMember = new NestedClass();
}
nestedClassToNestedClass( input.nestedMember, target.nestedMember );
}
if ( target.nestedMember == null ) {
target.nestedMember = new NestedClass();
}
inputToNestedClass( input, target.nestedMember );

return target;
}

@Override
public NestedClass mappingNested(test.Input.NestedClass nestedClass) {
if ( nestedClass == null ) {
return null;
}

NestedClass nestedClass1 = new NestedClass();

nestedClass1.bb = nestedClass.ab;
nestedClass1.bc = nestedClass.ac;
nestedClass1.bd = nestedClass.ad;

return nestedClass1;
}

protected void nestedClassToNestedClass(test.Input.NestedClass nestedClass, NestedClass mappingTarget) {
if ( nestedClass == null ) {
return;
}
}

protected void inputToNestedClass(Input input, NestedClass mappingTarget) {
if ( input == null ) {
return;
}

mappingTarget.ba = input.aa;
}
}
Таким образом, Mapstruct правильно генерирует метод MappingNested, но не использует его для сопоставления вложенных классов. Mapstuct генерирует метод (nestedClassToNestedClass) без каких-либо сопоставлений. Если я удалю явное сопоставление aa, все будет работать нормально. Но тогда у меня возникла проблема, как мне сопоставить отображение aa? Я не знаю, как сопоставить каждый атрибут вложенного класса в методе карты.
Есть ли у кого-нибудь идея?
С уважением.

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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