Saya rasa saya tahu ke mana arah pertanyaan Anda. Dan karena pertanyaan ini adalah pertanyaan yang muncul di hasil utama pencarian google, saya dapat memberikan jawaban yang jelas tentang apa yang dilakukan anotasi @Valid.
Saya akan menyajikan 3 skenario tentang bagaimana saya menggunakan @Valid
Model:
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>
...
Pengontrol untuk skenario 1:
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee){
return "employee-confirmation-page";
}
Dalam skenario ini, setelah mengirimkan formulir Anda dengan bidang nama belakang kosong, Anda akan mendapatkan halaman kesalahan karena Anda menerapkan aturan validasi tetapi Anda tidak menanganinya sama sekali.
Contoh kesalahan tersebut:
Halaman pengecualian
Pengontrol untuk skenario 2:
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee,
BindingResult bindingResult){
return bindingResult.hasErrors() ? "employee-form" : "employee-confirmation-page";
}
Dalam skenario ini, Anda meneruskan semua hasil dari validasi tersebut ke bindingResult, jadi terserah Anda untuk memutuskan apa yang harus dilakukan dengan hasil validasi formulir tersebut.
Pengontrol untuk skenario 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){
}
Dalam skenario ini Anda masih tidak menangani kesalahan seperti di skenario pertama, tetapi Anda meneruskannya ke metode lain yang akan menangani pengecualian yang dipicu @Valid saat memproses model formulir. Periksa ini melihat apa yang harus dilakukan dengan pemetaan dan semua itu.
Singkatnya : @Valid sendiri dengan tidak melakukan apa-apa lagi yang memicu validasi validasi bidang beranotasi JSR 303 ( @NotNull, @Email, @Size, dll ... ), Anda masih perlu menentukan strategi tentang apa yang harus dilakukan dengan hasil validasi tersebut.
Semoga saya bisa menjelaskan sesuatu untuk orang-orang yang mungkin tersandung dengan ini.
@Valid
padaApplicationForm
parameter tetapi, masih validasi dipecat padadate
(set sebagainull
) lapangan. Tolong jelaskan.