Я получаю сообщение об ошибке при попытке ввести недопустимые данные для пользователя, так как несколько сообщений об ошибках не могут быть обработаны. Подскажите, как я могу отобразить несколько сообщений об ошибках валидации, аннотированных аннотациями Bean Validation?
Произошла непредвиденная ошибка (тип = Внутренняя ошибка сервера, статус = 500). Ошибка пароля-дубликата (попытка слияния значений Необходимо выбрать пароль и пароль. java .lang.IllegalStateException: Ошибка пароля-дубликата (попытка слияния значений Необходимо выбрать пароль и Введен-пароль-пароль). не более 16 символов.)
Класс, аннотированный сущностью:
@Entity
@Table
public class User implements UserDetails, Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank(message = "Пожалуйста, укажите имя")
@Size(min = 2, max = 16, message = "Введено некорректное имя. Имя должно быть длиной от 2 до 16 символов.")
private String firstname;
.....
Метод сбора ошибок:
static Map<String, String> getErrors(BindingResult bindingResult) {
Collector<FieldError, ?, Map<String, String>> collector = Collectors.toMap(
fieldError -> fieldError.getField() + "Error",
FieldError::getDefaultMessage
);
return bindingResult.getFieldErrors().stream().collect(collector);
}
Метод контроллера для создания действительного пользователя:
@PostMapping("/user/create")
public String processCreateUser(
@Valid User user,
BindingResult bindingResult,
Model model) {
if (bindingResult.hasErrors()) {
Map<String, String> errors = ControllerUtils.getErrors(bindingResult);
model.mergeAttributes(errors);
return "adminUserCreate";
} else {
adminService.createUser(user, role);
return "redirect:/admin/users";
}
}
Bootstrap поле на шаблоне бесплатного маркера:
<div class="md-form">
<input type="text" id="firstname" name="firstname"
class="form-control ${(firstnameError??)?string('is-invalid', '')}">
<label for="firstname">Имя</label>
<#if firstnameError??>
<div class="invalid-feedback">
${firstnameError}
</div>
</#if>
</div>