Я пытаюсь проверить свою форму на ограничениях, установленных на моем компоненте. Версия Spring-MVC, которую я использую, - 3.2.4. Проблема заключается в том, что валидатор Spring по умолчанию не проверяет все ограничения; только те, которые одного типа.Validator for MethodArgumentNotValidException обрабатывает только ограничение того же типа
У меня есть следующий код контроллера:
@Controller
@SessionAttributes()
public class FormSubmitController {
@RequestMapping(value = "/saveForm", method = RequestMethod.POST)
@ResponseBody
public ModelMap saveForm(@Valid @RequestBody Form form, HttpSession session) {
session.setAttribute("form", form);
ModelMap map = new ModelMap();
map.addAttribute("hasErrors", false);
return map;
}
}
и следующий компонент:
public class Form implements IForm, Serializable {
@NotNull(message = "Category should not be empty")
protected String category;
@NotNull(message = "Sub-Category should not be empty")
protected String subCategory;
@Size(min=0, message="Firstname should not be empty")
protected String firstName;
@Size(min=0, message="Lastname should not be empty")
protected String lastName;
@Pattern(regexp="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\\d\\d$", message="Date of birth should be in dd-mm-jjjj format")
protected String dateOfBirth;
//getters and setters
}
Обработчик MethodArgumentNotValidException выглядит следующим образом:
@ControllerAdvice
public class FormExceptionController {
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public ModelMap handleMethodArgumentNotValidException(MethodArgumentNotValidException error) {
List<FieldError> errors = error.getBindingResult().getFieldErrors();
ModelMap map = new ModelMap();
ModelMap errorMap = new ModelMap();
map.addAttribute("hasErrors", true);
for (FieldError fieldError : errors) {
errorMap.addAttribute(fieldError.getField(), fieldError.getDefaultMessage());
}
map.addAttribute("bindingErrors", errorMap);
return map;
}
}
Таким образом, пустая форма приводит к появлению первых двух сообщений об ошибках. Сочетание двух свойств формы заполняет третье и четвертое сообщения об ошибках.
Только когда я использую тот же тип contraint (т. Е. NotNull) для всех свойств моего компонента, он вернет все сообщения об ошибках.
Что может быть неправильным здесь?