Есть ли способ указать входной аргумент по умолчанию для Mapstruct при использовании нескольких исходных значений?

#java #mapstruct

#java #mapstruct

Вопрос:

Итак, в приведенном ниже примере у меня есть 2 входных объекта, которые сопоставляются с одним выходным объектом. Большинство сопоставлений являются прямыми с одного входа на один вывод, и только одно из них поступает от другого объекта.

     @Mapping(source = "input.a" target = "output.a")
    @Mapping(source = "input.b" target = "output.b")
    @Mapping(source = "input.c" target = "output.c")
    @Mapping(source = "input.d" target = "output.d")
    @Mapping(source = "extra.a" target = "output.extraa")
    Output toOutputMapper(Input input, ExtraValues extra)
  

Есть ли способ сказать «использовать этот объект по умолчанию», что избавит меня от сопоставления значений и отказа от автоматического сопоставления, предоставляемого Mapstruct?

Что-то вроде:

     @Mapping(source = "extra.a" target = "output.extraa")
    Output toOutputMapper(@Default Input input, ExtraValues extra)
  

Ответ №1:

При использовании MapStruct 1.4 вы можете использовать сопоставление с текущей целью для достижения того, что вы ищете.

например

     @Mapping(source = "input" target = ".")
    @Mapping(source = "extra.a" target = "output.extraa")
    Output toOutputMapper(Input input, ExtraValues extra)