Здається, я знаю, куди прямує ваше запитання. І оскільки це запитання з’являється в основних результатах пошуку Google, я можу дати чітку відповідь на те, що робить анотація @Valid.
Я представлю 3 сценарії того, як я використовував @Valid
Модель:
public class Employee{
private String name;
@NotNull(message="cannot be null")
@Size(min=1, message="cannot be blank")
private String lastName;
}
JSP:
...
<form:form action="processForm" modelAttribute="employee">
<form:input type="text" path="name"/>
<br>
<form:input type="text" path="lastName"/>
<form:errors path="lastName"/>
<input type="submit" value="Submit"/>
</form:form>
...
Контролер для сценарію 1:
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee){
return "employee-confirmation-page";
}
У цьому випадку після надсилання форми з порожнім полем lastName ви отримаєте сторінку з помилкою, оскільки ви застосовуєте правила перевірки, але ви не обробляєте її взагалі.
Приклад зазначеної помилки:
Сторінка винятку
Контролер для сценарію 2:
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee,
BindingResult bindingResult){
return bindingResult.hasErrors() ? "employee-form" : "employee-confirmation-page";
}
У цьому сценарії ви передаєте всі результати цієї перевірки до bindingResult, тож вам вирішувати, що робити з результатами перевірки цієї форми.
Контролер для сценарію 3:
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee){
return "employee-confirmation-page";
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Map<String, String> invalidFormProcessor(MethodArgumentNotValidException ex){
}
У цьому сценарії ви все ще не обробляєте помилки, як у першому сценарії, але передаєте це іншому методу, який подбає про виняток, який @Valid запускає під час обробки моделі форми. Перевірте це, щоб побачити, що робити з картографуванням та ін.
Підводячи підсумок : @Valid сам по собі, не роблячи нічого більше, що ініціює перевірку валідації Коментовані поля JSR 303 ( @NotNull, @Email, @Size тощо ), вам все одно потрібно вказати стратегію, що робити з результатами зазначеної перевірки.
Сподіваюся, я зміг зрозуміти щось для людей, які можуть зіткнутися з цим.
@Valid
відApplicationForm
параметра , але, по- як і раніше валідації були випущені наdate
(набір вnull
) поле. Будь ласка, поясніть.