Как указать в Mapstruct что он должен вернуть валидацию в DTO если поля имеют разные имени?

У меня есть enitity с валидациями полей @NotNull

public class EntityName {

    @NotNull
    private Long fileId;

    @NotNull
    private Long contractId;

    @NotNull
    private String fileCode;

}

Также у меня есть маппер(mapstruct) из dto в enitity.

@Mapping(target = "fileCode", source = "dto.code")
EntityName mapDtoCreateToDtoUpdate(final EntityNameDTO dto);

Это dto:

public class EntityNameDTO {

    private Long fileId;

    private Long contractId;

    private String code;

}

Но дело в том что если я поле code из DTO null я получаю 500 код, вместо 400 с текстом об ошибке валидации.

И вот вопрос, как сделать так чтобы mapstruct знал что нужно взять анотации валидации с поля fileCode из поле и вернуть обратно в dto?

Ставить нотацию валидации в dto не вариант, так как у нас много сущностей и трудно за все уследить.

Валидация работает только когда оба поля совпадают по имени.


Ответы (1 шт):

Автор решения: Алексей

Можно переопределить логику мапинга с помощью отдельного метода target-method

@Mapping(target = "fileCode", expression = "java(target-method(dto.code))")
EntityName mapDtoCreateToDtoUpdate(final EntityNameDTO dto);

String target-method(String code) {
   return code==null? throw new RuntimeException() : code;
}

→ Ссылка