Bahkan, ini adalah metode yang dapat digunakan untuk menentukan anotasi khusus melalui @constraint.
@Constraint (validatedBy = xxxx.class)
Di bawah ini adalah contoh kode dari anotasi khusus Java yang saya buat untuk mengimplementasikan verifikasi parameter depan dan backend
Jika Anda tertarik dengan ini, silakan baca dengan cermat dan pelajari dengan cermat:
paket sonn.sonnannotation; impor java.lang.annotation.Documented; impor java.lang.annotation.elementType; impor java.lang.annotation.retention; impor Java.lang.annotation.RetentionPolicy; impor java.lang.annotation. javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;import javax.validation.Payload;import sonn.util.StringUtill;/*** @ClassName: IsValidString * @Description: Custom annotations implement front and backend parameter verification to determine whether they contain illegal characters* @author Unnamed* @Date 2016-7-25 8:22:58 PM * @Version 1.0 */@target ({elementType.field, elementType.method})@retention (retentionPolicy.runtime) @constraint (validedby = isValidString.validStringChecker.class) @document @documentsstring.Irlic.Irlic.IrlICRACING.IrlRIC.IRPLIC.IRPLIC.IRPLIC.IRCERRACTRECCHECCER tidak sah."; Kelas <?> [] Grup () default {}; Kelas <? Extends payload> [] payload () default {}; class ValidStringChecker implements ConstraintValidator<IsValidString,String> { @Override public void initialize(IsValidString arg0) { } @Override public boolean isValid(String strValue, ConstraintValidatorContext context) { if(StringUtill.isStringEmpty(strValue)) { return true; } if (strvalue.contains ("<")) {return false; } return true; }}}Kode di atas mendefinisikan logika metode anotasi melalui @constraint (divalidasiby = isValidString.validStringChecker.class)-kelas dalam kelas anotasi bernama ValidStringChecker.
Kelas internal ini mengimplementasikan antarmuka ConstrainValidator <isValidString, String>
Dokumentasi resmi menggambarkannya seperti ini:
javax.Validation
Antarmuka ConstraintValidator <A Extends Annotation, T>
•
-----------------------------------------------------------------------------------------------------------------------------
Public Interface ConstraintValidator <A Extends Annotation, T> mendefinisikan logika untuk memvalidasi batasan yang diberikan A untuk tipe objek yang diberikan T.
Implementasi harus mematuhi pembatasan berikut:
• t harus menyelesaikan ke tipe yang tidak diparameterisasi
• atau parameter generik dari T harus tidak memiliki tipe wildcard yang tidak terbatas
Anotasi SupportedValidationTarget dapat diletakkan pada implementasi ConstraintValidator untuk menandainya sebagai mendukung kendala lintas parameter. Lihatlah SupportedValidationTarget dan kendala untuk informasi lebih lanjut.
Metode isValid yang diimplementasikan adalah metode verifikasi antarmuka ini.
Uji efeknya dan tambahkan anotasi ke bidang kelas entitas yang akan diverifikasi:
Tulis halaman artikel, tambahkan '<' dalam judul artikel dan kirim:
Pengajuan gagal, dengan kesalahan 500, menunjukkan bahwa anotasi berlaku:
Tapi masih ada masalah dengan ini. Situs web blog saya tidak dapat mencetak pesan kesalahan secara langsung. Anda masih harus membuat halaman kesalahan.
Ini sederhana, tambahkan jalur halaman kesalahan di bawah web.xml, dan kemudian buat halaman:
<sror-page>
<REST-CODE> 500 </error-code>
<location> /Error.jsp </cocation>
</error-page>
Pertama, mari kita perkenalkan beberapa konsep dasar:
1.java mendefinisikan anotasi dengan @interface xx {}.
Anotasi sebenarnya tidak misterius, itu hanya tanda. Ketika program berjalan pada tanda, ia menjalankan logika yang sesuai. Anotasi itu sendiri adalah kelas.
2. Saat mendefinisikan anotasi, memberi label beberapa anotasi dapat mewakili makna spesifik:
@Retention (retentionPolicy.source) // Anotasi hanya ada dalam kode sumber dan tidak mengandungnya di file bytecode kelas.
@Retention (retentionpolicy.class) // Kebijakan retensi default, anotasi akan ada dalam file bytecode kelas, tetapi tidak dapat diperoleh selama runtime.
@Retention (retentionpolicy.runtime) // anotasi akan ada di file bytecode kelas dan dapat diperoleh melalui refleksi saat runtime.
(Runtime patut dicatat karena itu berarti dapat diambil dengan refleksi)
@Target (elementType.type) // antarmuka, kelas, enumerasi, anotasi
@Target (elementType.field) // konstan untuk bidang dan enum
@Target (elementType.method) // Metode
@Target (elementType.parameter) // parameter metode
@Target (elementType.constructor) // constructor
@Target (elementType.local_variable) // variabel lokal
@Target (elementType.annotation_type) // anotasi
@Target (ElementType.Package) // Paket
Ada cara untuk menambahkan @taget (xx) dan @retention (retentionpolicy.runtime) saat mendefinisikan anotasi, tetapi jangan menulis metode dalam anotasi. Mereka hanya menggunakan mekanisme refleksi untuk mendapatkan anotasi saat runtime, dan kemudian menulis logika yang sesuai sendiri (yang disebut parser anotasi)
Mungkin cara yang serupa untuk menulis:
impor java.lang.annotation.dokumen; impor java.lang.annotation.elementType; impor java.lang.annotation.herited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; impor java. ElementType.method}) @retensi (retentionpolicy.runtime) public @interface Validate {public int min () default 1; Public int max () default 10; public boolean isnotnull () default true;}Saat berjalan nanti, gunakan refleksi untuk mendapatkan anotasi, dan saya tidak akan membahas detailnya.
Saya menemukan artikel teknis semacam ini tentang ini sebelum mencari artikel teknis di internet, yang membawa saya kebingungan besar pada waktu itu. Saya tidak berpikir saya mau.
Contoh anotasi khusus Java di atas untuk mengimplementasikan verifikasi parameter depan dan backend adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.