jsdevel
@jsdevel
Java разработчик. Хороший парень, наверное.

Как правильно использовать mapstruct c параметрами мапинга?

Всем привет.
Значит ситуация такая.

//Есть сущность
public class MyObject {
  public Word word; // имеет множество переводов, содержит в себе
}

//и необходимо смапить в сущность с переводом

public class MyObjectDto {
  public String wordValue; // имеет множество переводов, содержит в себе
}

@Component
public class CustomMapper {
  public String converterMapper(Word word, Language lang)
}

@Mapper(componentModel = "spring", uses = CustomMapper.class)
public interface MyObjectMapper {
  //И почему не всегда @Autowired CustomMapper из-за этого не могу использовать expression
@Mappings({
            @Mapping(source = "word", target = "wordValue", qualifiedBy=(CustomMapper.class???)) //как передать параметр
    });
    MyObjectDto map(MyObject mo); 

    MyObject map(MyObjectDto myObjectDto);
}
  • Вопрос задан
  • 3348 просмотров
Решения вопроса 1
jsdevel
@jsdevel Автор вопроса
Java разработчик. Хороший парень, наверное.
Значит было сделано так.

@Mapper(componentModel = "spring", uses = CustomMapper.class)
public interface MyObjectMapper {
        @Mappings({
            @Mapping(target = "field", expression = "java(customMapper.convert(obj.field, lang))"
         })
         DTO map(Entity obj, Language lang);
}


Если используете Spring, то нужно не только указать componentModel = "spring" , но и удалить поле имеющее INSTANCE, иначе @Autowired не будет подставлять реализацию.

...
CarMapper INSTANCE = Mappers.getMapper( CarMapper.class );
...


Думаю тема может быть закрыта.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы