我在控制器中有此方法:
@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
块中同时返回到表单?