У меня есть этот метод в контроллере:
@PostMapping("/saveMalt")
public String saveOrUpdate(@Valid @ModelAttribute("malt") Malt malt, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
bindingResult.getAllErrors().forEach(objectError -> {
log.debug(objectError.toString());
});
return VIEWS_MALT_CREATE_OR_UPDATE_FORM;
} else {
try {
Malt savedMalt = maltService.save(malt);
return "redirect:/malt/" + savedMalt.getId();
} catch (Exception e) {
if (e instanceof ConstraintViolationException || e instanceof DataIntegrityViolationException) {
if (malt.getProducer().getId() == 0) {
bindingResult.rejectValue("producer", "ConstraintViolationException");
}
if (malt.getCountry().getId() == 0) {
bindingResult.rejectValue("country", "ConstraintViolationException");
}
return VIEWS_MALT_CREATE_OR_UPDATE_FORM;
}
return null;
}
}
}
А это в модели:
@NotBlank
@Column(name="malt_name")
private String maltName;
@NotNull
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="producer_id")
private Producer producer;
Во-первых, я проверяю, есть ли в bindingResult
ошибки, затем я ловлю ошибку при сохранении объекта.
Когда maltName
равно нулю, аннотация @NotBlank
работает, возвращая ошибку в форму.
Но если maltName
равен нулю, и при проверке producer
(в блоке catch
) возникают некоторые ошибки, в форму возвращается только ошибка о maltName
.
Что можно сделать, чтобы вернуть обе ошибки - из блока bindingResult.hasErrors()
и catch
, которые должны быть возвращены в форму одновременно?