Baru -baru ini, perlu untuk mengirimkan data dinamis, yaitu, Anda perlu menganalisis dan mengirimkan informasi definisi bidang data sebelum Anda dapat memperjelas jenis bidang spesifik yang sesuai, dan kemudian melakukan konversi tipe data dan verifikasi validitas lapangan. Kemudian, setelah melakukan pemrosesan bisnis, mengirimkan database, dan mengembangkan serangkaian logika verifikasi sendiri, siklusnya terlalu lama. Oleh karena itu, prinsip implementasi validasi musim semi dianalisis, dan berbagai validator yang mendasarinya digunakan kembali. Di sini, proses menganalisis prinsip validasi pegas akan dicatat tanpa masuk ke perincian.
Cara menggunakan validasi musim semi
Periksa apakah kacang mematuhi spesifikasi JSR-303 saat menginisialisasi kacang musim semi
1. Secara manual tambahkan beanvalidationpostprocessor bean
2. Tentukan aturan verifikasi di kelas model, seperti @max, @min, @notempty
3. Deklarasikan kacang, kode komprehensif adalah sebagai berikut:
@BeanPublic beanpostprocessor beanvalidationPostProcessor () {return baru beanvalidationPostProcessor ();}@beanpublic usermodel getusermodel () {usermodel usermodel = baru usermodel (); usermodel.setusername (null); usermodel.setPassword ("123"); kembalikan usermodel;} @dataclass usermodel {@notnull (message = "nama pengguna tidak bisa menjadi nol") @pattern (regexp = "[a-za-z0-9 _] {5,10}", pesan = "username ilegal") string username pribadi; @Size (min = 5, maks = 10, pesan = "Panjang kata sandi ilegal") kata sandi string pribadi;}4. BeanvalidationPostProcessor Ada properti tipe boolean setelah incialisasi, yang salah secara default. Jika salah, kacang diverifikasi dalam proses postprocessbeforeinitialisasi. Kalau tidak, kacang diverifikasi dalam proses postprocessafterinitialisasi.
5. Verifikasi ini menggunakan logika BeanpostProcessor Spring
6. Verifikasi bahwa metode Dovalidate dipanggil, dan validator panggilan lebih lanjut. Validate. Validator default adalah Hibernatevalidator, paket validasi-API adalah spesifikasi Java, dan spesifikasi pegas default diimplementasikan sebagai paket hibernate-validator. Hibernate non-an non-an hibernate ini Hibernate
Protected void Dovalidate (Object Bean) {assert.state (this.validator! = null, "tidak ada set validator"); Set <ConceptViolation <BOMPERTIF>> hasil = this.validator.validate (bean);7. Hibernatevalidator Panggilan ValidatorFactoryImpl secara default untuk menghasilkan validator, dan kemudian perluas validatorFactoryImpl
Metode Dukungan Level JSR-303 Spesifikasi
1. Secara manual tambahkan methodValidationPostProcessor bean
2. Tambahkan anotasi @valided ke kelas (anotasi khusus juga didukung, dan dilewati saat membuat methodValidationPostProcessor bean)
3. Tambahkan anotasi verifikasi ke parameter metode, seperti @max, @min, @notempty, @notnull, dll.
@Component@validatedPublic class beanFormethodValidation {public void validate (@notempty name string, @min (10) int usia) {System.out.println ("Validasi, Nama:" + Nama + ", usia:" + usia); }}4. MethodValidationPostProcessor menggunakan AOP untuk menyelesaikan panggilan ke metode
public void afterpropertiesset () {pointcut pointcut = baru `annotationmatchingpointcut` (this.validatedAnnotationType, true); this.advisor = baru `defaultPointCutAdvisor` (pointcut, createMethodValidationAdvice (this.validator));} saran yang dilindungi createMethodValidationAdvice (@nullable validator validator) {return (validator! = null? MethodValidationIndationInceptor` `new validorceptEnceptor (validor) (new validorceptEnceptor (new validor) (new validorcepteCeptEnceptor (need need validorceptEnceptor (need ne New?5. Lapisan yang mendasarinya juga memanggil ValidatorFactoryImpl secara default untuk menghasilkan validator, dan validator menyelesaikan verifikasi.
Logika verifikasi panggilan pengkodean langsung, seperti
Public Class Person {@notnull (message = "Jenis Kelamin Tidak Bisa Kosong") Jenis Kelamin Jenis Kelamin Pribadi; @min (10) usia integer pribadi; ...} validatorFactory validatorFactory = validasi.builddefaultValidatorFactory (); validator validator = validatorFactory.getValidator (); personalfactory = Orang (); orang.Sama seperti di atas, panggilan default ke ValidatorFactoryImpl dipanggil untuk menghasilkan validator, dan validator menyelesaikan verifikasi spesifik.
Gunakan anotasi yang valid atau divalidasi untuk memberi anotasi parameter yang akan diperiksa dalam parameter metode pengontrol pegas
1. Pertama, biasakan diri Anda dengan permintaan dan proses panggilan musim semi
2. Anda dapat melihat bahwa verifikasi parameter dilakukan selama proses berbagai parameter permintaan pemrosesan resolvers.
3. Lapisan yang mendasari memanggil metode validasi basis data secara seragam
4. Peran databinder: pengikat yang memungkinkan untuk mengatur nilai properti ke objek target, termasuk dukungan untuk validasi dan analisis hasil yang mengikat, yaitu, binder memproses parameter bentuk string yang dikirimkan berdasarkan permintaan dan mengubahnya menjadi jenis yang benar-benar dibutuhkan server. Binder memberikan dukungan untuk validasi dan dapat menyimpan hasil verifikasi.
5. Validator Databinder diinisialisasi dalam konfigurasi yang dapat dikonfigurasi dengan Default secara default. OpsionalValidatorFactoryBean digunakan secara default. Kacang ini mewarisi localvalidatorfactorybean. LocalValidatorFactoryBean menggabungkan berbagai informasi verifikasi seperti validatorFactory, properti verifikasi khusus, dll., Dan menggunakan ValidatorFactoryImpl untuk mendapatkan validator secara default.
Pada titik ini, semua petunjuk menunjuk ke ValidatorFactoryImpl. Analisis berikut adalah sebagai berikut
Validator publik `getValidator` () {return` createValidator` (ConseptValidataManager.getDefaultConstraintValidatorFactory (), valueExtractormanager, validatorFactoryScopedContext, MethodValidationConfiguration); `validator` validator `validator` validator `validator` validator, Valueextractormanager valueExtractormanager, validatorFactoryScopedContext validatorFactoryScopedContext, methodValidationConfiguration method validationConfiguration) {beanmetadatamanager beanmetadatamanager = beanmetadatamans.cuteifabers. validatorFactoryScopedContext.getParameternameprovider (), valueExtractormanager, methodValidationConfiguration), kunci -> beanmetadatamanager baru (`constrainthelper`, executableHelper, typereSolutionHelper, validatorFactoryScorycoCorycextext. ValidationOrdenerator, buildDataProviders (), MethodValidationConfiguration)); return `new validatorImpl` (ConstrainValidatorFactory, BeanMetadatamanager, ValueExtractormanager, ConstraintValidataManager, ValidationOrdenerator, ValidatorFactoryScopedContext);} public final <t> Set <ctruktAintViolation <t >> Valided (TE CLASS, KONTROL / KONTRAKT. Pesan.ValidedObjectMustNotBenull ()); SanityCheckGroup (grup); ValidationContext <T> validationContext = `getValidationContextBuilder (). ForValidate (objek)`; if (! ValidationContext.getRootBeanMetadata (). HasConstraints ()) {return collections.EmptySet (); } ValidationOrder ValidationOrder = DefitegroupValidationOrder (grup); ValueContext <?, Object> valueContext = `valueContext.getLocalExecutionContext` (validatorScopedContext.getParameterneProvider (), objek, validationContext.getrootbeanmetadata (), pathImpl.creatreootpath (); return validateIncontext (ValidationContext, ValueContext, ValidationOrder);}1. GetValidator-> CreateValidator-> ValidatorImpl-> Validasi
Selama proses eksekusi, beanmetadatamanager, validationContext, valueContext dan konten lainnya dienkapsulasi, yang merupakan informasi konteks yang akan digunakan selama verifikasi, seperti semua item verifikasi dari kacang yang akan diperiksa (termasuk kelas induk, seperti propor, dan informasi validor, dan berbagai kelas alat yang digunakan oleh validator (seperti halnya. dll. dan kontennya relatif kompleks.
2. Verifikasi grup diabaikan, dan pemrosesan kelompok default adalah validateconstraintsfordeFaultgroup-> validateconstraintsforsingleDefaultgroupelement-> validatemetaConstraint (Catatan: Metaconstraints mempertahankan semua verifikasi dari jenis kacang dan kelas induknya), dan itu perlu dilalui dan panggilan validatem
3. Terus panggil metode dovalidateconstraint dari MetaConstraint, dan ikuti berbagai kendala sesuai dengan jenis anotasi yang berbeda.
Publik statis <u memperluas anotasi> kendala <u> dari (kendala ConscriptorImpl <u> ComposingDescriptor, Type ValidatedValUetype) {if (composedDescriptor.getCompositingConstraintImpls (). ISEempty ()) {return new SimpleconstreintRee <> (composordesprypy (). } else {return new composedConstrainttree <> (composedDescriptor, validatedValueType); }}4. Apa yang harus saya lakukan sederhana dan apa yang harus dikomposisi? Karena mereka berdua menyebut metode 'getInitializedConstraintValidator' dari Constrainttree. Langkah ini digunakan untuk mendapatkan validator yang sesuai dengan anotasi (seperti Decimalmax, Notempty, dll.) Dan menginisialisasi validator.
5. Kelas ConstraintHelper mempertahankan semua validator builtin dan mengklasifikasikannya sesuai dengan anotasi verifikasi (seperti Decimalmax). Kelas deskripsi validator mempertahankan templat generik validator (seperti BigDecimal) sebagai berikut:
Putconstraints (tmpconstraints, decimalmax.class, arrays.aslist (decimalmaxvalidatorforbigdecimal.class, decimalmaxvalidatorforbiginteger.class, decimalmaxvalidorfordouble.class, decimalmaxvaxvaxvalidatorforforforcleat.classclass. Decimalmaxvalidatorfornumber.class, decimalmaxvalidatorforcharcetence.class, decimalmaxvalidatorformonetaryamount.class));
Saat mendapatkan validator kelas kacang tertentu, pertama -tama dapatkan semua validator sesuai dengan anotasi. Metode yang sesuai adalah ConseptainManager.FindmatchingValidataDescriptor, dan kemudian mendapatkan validator unik sesuai dengan jenis objek yang diperiksa.
6. Kemudian initializevalidator berdasarkan informasi konteks, dan kemudian hubungi metode validator validator untuk memverifikasi
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.