如何从BindingResult返回错误并捕获错误以同时形成

时间:2019-06-11 21:17:19

标签: spring-mvc error-handling

我在控制器中有此方法:

@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块中同时返回到表单?

0 个答案:

没有答案