Spring mendukung dua metode validasi yang berbeda: validasi Spring dan validasi kacang JSR-303. Keduanya dapat digunakan dengan mendefinisikan validator Spring yang didelegasikan ke delegator lain termasuk bean validator. Sejauh ini baik.
Tetapi ketika memberi anotasi metode untuk benar-benar meminta validasi, itu cerita lain. Saya bisa memberi anotasi seperti ini
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {
atau seperti ini
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {
Di sini, @Valid adalah javax.validation.Valid , dan @Validated adalah org.springframework.validation.annotation.Validated . Dokumen untuk yang terakhir mengatakan
Varian Valid JSR-303, mendukung spesifikasi grup validasi. Didesain untuk penggunaan yang nyaman dengan dukungan JSR-303 Spring tetapi tidak spesifik JSR-303.
yang tidak banyak membantu karena tidak memberi tahu persis bagaimana perbedaannya. Jika sama sekali. Keduanya tampaknya bekerja dengan baik untuk saya.
sumber
Jawaban:
Seperti yang Anda kutip dari dokumentasi,
@Validated
ditambahkan untuk mendukung "grup validasi", yaitu grup bidang dalam kacang yang divalidasi. Ini dapat digunakan dalam formulir multi langkah di mana Anda dapat memvalidasi nama, email, dll .. pada langkah pertama dan kemudian bidang lain pada langkah berikutnya.Alasan mengapa ini tidak ditambahkan ke dalam
@Valid
anotasi adalah karena itu distandarisasi menggunakan proses komunitas java (JSR-303), yang membutuhkan waktu dan pengembang Spring ingin mengizinkan orang untuk menggunakan fungsi ini lebih cepat.Buka tiket jira ini untuk melihat bagaimana anotasi muncul.
sumber
Jawaban yang lebih jujur. Bagi mereka yang masih belum tahu apa itu "grup validasi" .
Penggunaan untuk
@Valid
ValidasiPengontrol:
Bentuk objek:
Penggunaan untuk
@Validated
Sumber Grup Validasi : http://blog.codeleak.pl/2014/08/validation-groups-in-spring-mvc.html
Pengontrol:
Bentuk objek:
sumber
Dalam contoh cuplikan kode pertanyaan,
@Valid
dan@Validated
tidak ada bedanya. Tetapi jika@RequestBody
dianotasi dengan sebuahList
objek, atau nilai string dianotasi oleh@RequestParam
, validasi tidak akan berpengaruh.Kita dapat menggunakan
@Validated
kemampuan validasi tingkat metode untuk membuatnya bekerja. Untuk mencapai ini, poin kuncinya adalah ditempatkan@Validated
di kelas. Ini mungkin perbedaan penting lainnya antara@Valid
dan@Validated
dalam kerangka pegas.Refrence
sumber
List
objek? Saya berasumsi bahwa ini juga tidak akan berfungsi untuk koleksi lain sepertiMap
? Mungkin Anda bisa memberi saya penjelasan yang lebih rinci dalam pertanyaan saya: stackoverflow.com/questions/60167961/…selain di atas, Anda hanya dapat menerapkan
@Valid
pada domain / bidang untuk validasi bersarang, bukan dengan@validated
.sumber