Как указать в 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;
}