Как вернуть ошибки из BindingResult и перехваченные ошибки, чтобы сформировать одновременно - PullRequest
0 голосов
/ 12 июня 2019

У меня есть этот метод в контроллере:

@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, которые должны быть возвращены в форму одновременно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...