Kata pengantar
Komponen validator dari kerangka kerja pegas adalah komponen tambahan, yang sangat berguna untuk integritas dan validitas data. Dengan mendefinisikan validator tertentu, dapat digunakan di tempat lain di mana diperlukan, dan itu sangat umum.
Sebelum menjalankan logika bisnis, perlu untuk memastikan bahwa data input yang diterima adalah legal dan benar melalui verifikasi. Namun, berkali -kali verifikasi yang sama terjadi berkali -kali, yang mengarah pada redundansi kode, waktu membuang -buang, dan melanggar prinsip kering.
Anda dapat mempertimbangkan merangkum kode verifikasi untuk menyelesaikan masalah ini.
JSR-303
JSR-303 adalah kerangka kerja standar yang disediakan oleh Java untuk verifikasi legalitas data kacang. Ini mendefinisikan serangkaian anotasi verifikasi yang dapat dijelaskan pada variabel anggota dan metode atribut.
Validasi Hibernate menyediakan serangkaian implementasi standar ini. Ketika kami memperkenalkan starter web boot musim semi atau validasi starter boot musim semi, validasi hibernate akan diperkenalkan secara default.
Contoh Penggunaan
Setelah mengatakan begitu banyak omong kosong, tambahkan kode.
1. Perkenalkan Proyek Springboot
<dependency> <GroupId> org.springframework.boot </groupid> <t Artifactid> Spring-boot-starter-web </arttifactid> </gandendency> <dependency> <grouptid> org.hibernate.validator </grouptid> <t Artifactid> Hibernate-validator </artifactid </gruptid> <titifactid> <dependency> <GroupId> org.projectlombok </groupid> <ArTifactid> lombok </t Artifactid> </dependency>
2. Tulis objek verifikasi
@DataPublic Class User {// Namanya tidak diizinkan untuk kosong, dan panjang namanya antara 2 dan 30 bit // Jika panjang nama tidak berlalu, maka pesan kesalahan diminta @notnull @size (min = 2, max = 30, pesan = "Harap periksa apakah ada masalah dengan panjang nama") name private; // Namanya tidak diizinkan kosong, dan usia minimum adalah 18 @notnull @min (18) usia integer pribadi;}3. Buat pengontrol
@SpringbootApplication@restcontrollerPublic kelas UserApplication {public static void main (string [] args) {springApplication.run (userApplication.class, args); } // 1. Tambahkan anotasi @valid sebelum parameter akan diperiksa // 2. Ikuti segera, ikuti BindingResult untuk menyimpan informasi verifikasi @RequestMapping ("/test1") Test objek publik (@Valid Pengguna, BINDINGRESULT BINDINGRESULT) {// Jika ada masalah dengan kesalahan. Bahkan, informasi khusus dapat dikembalikan sesuai dengan metode BindingResult sesuai kebutuhan. // Solusi yang biasa adalah: JSR-303 + Global ExceptionHandler if (bindingResult.haserrors ()) {return bindingResult.getallerrors (); } return "ok"; }} 4. Jalankan aplikasi
Setelah demonstrasi singkat dari hasil operasi, dapat dilihat bahwa kerangka kerja verifikasi telah berlaku.
Periksa usia
Verifikasi nama
Verifikasi berlalu
Anotasi Verifikasi Umum
@Null elemen beranotasi harus nol
@Notnull elemen beranotasi tidak boleh nol
@Asserttrue elemen beranotasi pasti benar
@Assertfalse elemen beranotasi harus salah
@Min (nilai) Elemen beranotasi harus menjadi angka, dan nilainya harus lebih besar dari atau sama dengan nilai minimum yang ditentukan.
@Max (nilai) Elemen beranotasi harus menjadi angka, dan nilainya harus kurang dari atau sama dengan nilai maksimum yang ditentukan.
@Decimalmin (nilai) Elemen beranotasi harus menjadi angka, dan nilainya harus lebih besar dari atau sama dengan nilai minimum yang ditentukan
@Decimalmax (nilai) Elemen beranotasi harus menjadi angka, dan nilainya harus kurang dari atau sama dengan nilai maksimum yang ditentukan
@Size (maks =, min =) Ukuran elemen beranotasi harus berada dalam kisaran yang ditentukan.
@Digits (integer, fraksi) Elemen beranotasi harus nomor dan nilainya harus dalam kisaran yang dapat diterima.
@Past elemen beranotasi haruslah tanggal masa lalu
@Future elemen beranotasi harus menjadi tanggal mendatang
@Pattern (regex =, flag =) Elemen beranotasi harus memenuhi ekspresi reguler yang ditentukan
Periksa anotasi yang disediakan oleh Hibernate Validator:
@Notblank (pesan =) Pastikan bahwa string tidak nol dan harus lebih besar dari 0
@Email Elemen beranotasi harus berupa alamat email
@Length (min =, max =) Ukuran string yang dijelaskan harus berada dalam kisaran yang ditentukan.
@Notempty string yang dikomentari harus tidak kosong
@Range (min =, max =, pesan =) elemen beranotasi harus berada dalam kisaran yang sesuai
Anotasi verifikasi khusus
Terkadang, jenis verifikasi yang kita inginkan tidak ada di perpustakaan pihak ketiga. Untungnya, sistem ini memberikan kemampuan ekspansi yang baik, dan kami dapat menyesuaikan verifikasi.
Misalnya, kami ingin memverifikasi format ponsel pengguna dan menulis perangkat verifikasi nomor ponsel.
1. Tulis Anotasi Verifikasi
// Kita dapat secara langsung menyalin anotasi dalam sistem seperti @min, menyalinnya ke anotasi baru kami, dan kemudian memodifikasinya sesuai kebutuhan. @Target ({Method, field, annotation_type, konstruktor, parameter})@retensi (runtime)@didokumentasikan // kelas implementasi yang dijelaskan. @Constraint (validatedBy = {isMobilevalidator.class}) public @interface IsMobile {// Informasi default untuk verifikasi kesalahan string pesan () default "Ada masalah dengan format nomor ponsel"; // apakah akan memaksa verifikasi boolean isRequired () default false; Kelas <?> [] Grup () default {}; Kelas <? Extends payload> [] payload () default {};} 2. Tulis kelas implementasi khusus
Kita tahu bahwa anotasi hanyalah tanda, dan logika nyata harus diimplementasikan dalam kelas tertentu. Anotasi pada langkah sebelumnya menentukan bahwa kelas yang mengimplementasikan fungsi verifikasi adalah ismobilevalidator.
// Anotasi khusus harus mengimplementasikan antarmuka ConstrainValidator, dua parameter di dalamnya // Yang pertama adalah anotasi spesifik yang akan diverifikasi // yang kedua adalah jenis parameter dari verifikasi kelas publik ismobilevalidator mengimplementasikan ConceptValidator <isMobile, string> {private boolean diperlukan = false; Private Static Final Pattern Mobile_Pattern = Pattern.Compile ("1 // D {10}"); // Metode alat, tentukan apakah itu nomor ponsel boolean public static ismobile (string src) {if (stringutils.isempty (src)) {return false; } Pencocokan m = mobile_pattern.matcher (src); return m.matches (); } @Override public void initialize (isMobile ConstraintAnnotation) {wajib = Constrainnotation.isRequired (); } @Override public boolean isValid (string phone, conceptValidatorContext ConceptValidatorContext) {// Apakah itu implementasi nomor ponsel jika (diperlukan) {return isMobile (telepon); } else {if (stringutils.isempty (phone)) {return true; } else {return isMobile (telepon); }}}} 3. Uji fungsi anotasi khusus
User kelas @DataPublic {@notnull @size (min = 2, maks = 30, pesan = "Silakan periksa apakah ada masalah dengan panjang nama") nama string pribadi; @Notnull @min (18) usia bilangan bulat pribadi; // Ini adalah Annotation @ISMobile Private String Phone yang baru ditambahkan;}4. Tes
lulus
Ada masalah dengan nomor ponsel
Dapat dilihat bahwa anotasi khusus telah berlaku.
Kami juga dapat terus mengoptimalkan tempat dan membuat pengecualian global baru. Jika verifikasi gagal, lempar pengecualian bisnis global, tangkap pengecualian bisnis, dan kemudian kembalikan informasi cepat yang ramah pengguna.
tambahan
Ini juga dapat melewati verifikasi metode.
1. Tambahkan anotasi @validasi ke pengontrol
2. Tambahkan anotasi verifikasi, @min, @max, dll. Ke metode pengontrol.
@Validasi@restcontroller@springbootApplicationPublic kelas UserApplication {public static void main (string [] args) {springApplication.run (userApplication.class, args); } @RequestMapping ("/test2") public string test2 (@ISMobile String Phone) {return phone + "ok"; } @ExceptionHandler (ConceptAintViolationException.class) @ResponseBody Objek Publik HandLeconstraintViolationException (ConceptViolationException CVE) {HashSet <String> messesset = new HashSet (); for (ConstraintViolation ConstraintViolation: cve.getConstraintviolations ()) {messeset.add (conceptviolation.getMessage ()); } mengembalikan pesan; }} Aturan verifikasi kelas
akhirnya
Dengan menggunakan perangkat verifikasi, kami tidak perlu lagi memeriksa semua pengontrol. Jika kode sangat menyegarkan, itu akan terjadi. Kami menulis kode dengan sangat singkat, tetapi kami harus berpikir tentang cara menulis kode yang lebih sederhana, lebih jelas dan lebih kondusif untuk pemeliharaan. Menulis kode duplikat adalah buang -buang waktu Anda.
Ketika Anda menghadapi verifikasi parameter di masa depan, hal pertama yang Anda pikirkan adalah tidak memeriksanya secara langsung. Anda dapat mengetahui apakah Anda telah menulis jenis verifier tertentu dan Anda dapat menggunakannya secara langsung.
Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.