Когда выражение используется в mapStruct? - PullRequest
0 голосов
/ 19 июня 2019

Я начинаю с MapStruct.Я не могу понять, когда мы используем тег "expression" в MapStruct?Почему у нас есть определенные сопоставления, где мы используем тег «target» и тег «expression»?Означает ли это, что выражения используются, когда вы хотите отобразить два или более полей в бине на одно свойство / поле в цели, как упомянуто в документации "http://mapstruct.org/documentation/stable/reference/html/#expressions"

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Выражения используются, когда вы не можете сопоставить источник с целевым свойством или когда constant не применяется.MapStruct предполагал, что для адресации выражений можно использовать несколько языков.Однако реализован только простой Java (следовательно, "java(... )").EL был задуман, но еще не реализован.

Типичный вариант использования, который я использую, - генерация UUID.Но даже там вы можете попробовать новый @Context для достижения этой цели.

Помните, что содержимое в скобках помещается непосредственно в сгенерированный код.Среда IDE не может проверить ее правильность, и вы будете обнаруживать проблемы только во время компиляции.

Выражения являются ИМХО запасным средством заполнения / пробела для вещей, которые еще не реализованы в MapStruct.


Примечание. Сопоставление цели с источником с помощью пользовательского метода, как предлагается в других ответах, может выполняться автоматически.MapStruct распознает подпись (тип возвращаемого значения, тип источника) и вызывает ваш пользовательский метод.Вы можете сделать это в том же интерфейсе (метод по умолчанию) или в используемом маппере.

0 голосов
/ 20 июня 2019

В общем случае выражения MapStruct используются, когда вы просто не можете написать картограф MapStruct.Они должны использоваться в качестве запасного подхода, когда библиотека не применяется к вашему сценарию использования.

Например, - как сказано в документации, - когда для отображения требуется более одной исходной переменной,Выражение может быть использовано для «инъекции» в метод отображения.

Другой вариант использования - это когда исходная переменная, которую вы должны использовать, скажем, bar, не является частью исходного класса, а является членом одной из его переменных (здесь classVar).Вы бы сопоставили его с целевым полем foo, используя пользовательский метод myCustomMethod с @Mapping(target="foo", expression="java(myCustomMethod(source.classVar.bar)))".

...