1. การตรวจสอบพารามิเตอร์
ในการพัฒนาคุณมักจะต้องเขียนรหัสบางอย่างสำหรับการตรวจสอบภาคสนามเช่นฟิลด์ที่ไม่ว่างเปล่าขีดจำกัดความยาวของฟิลด์การตรวจสอบรูปแบบกล่องจดหมาย ฯลฯ ฉันรู้สึกว่ามีปัญหาสองประการเมื่อเขียนรหัสเหล่านี้ที่เกี่ยวข้องกับตรรกะทางธุรกิจเพียงเล็กน้อย:
Hibernate Validator (เอกสารอย่างเป็นทางการ) ให้วิธีการตรวจสอบที่ค่อนข้างสมบูรณ์และสะดวก
แพ็คเกจ Spring-Boot-Starter-Web มีแพ็คเกจ Hibernate-Validator และไม่จำเป็นต้องอ้างถึงการพึ่งพาการตรวจสอบความถูกต้องของ Hibernate
2. ตัวอย่างการตรวจสอบความถูกต้องของ Hibernate ตรวจสอบความถูกต้อง
ก่อนอื่นให้ดูการสาธิตอย่างง่ายเพิ่มคำอธิบายประกอบของผู้ตรวจสอบ:
นำเข้า org.hibernate.validator.constraints.notblank; นำเข้า Javax.validation.constraints.assertfalse; นำเข้า Javax.validation.constraints.pattern;
@getter@setter@noargsconstructorpublic คลาส demomodel {@notblank (message = "ชื่อผู้ใช้ไม่สามารถว่างเปล่า") ชื่อผู้ใช้สตริงส่วนตัว; @NotBlank (message = "อายุไม่ว่าง") @pattern (regexp = "^[0-9] {1,2} $", message = "อายุไม่ถูกต้อง") อายุสตริงส่วนตัว; @assertFalse (message = "ต้องเป็นเท็จ") บูลีนส่วนตัว isfalse; / *** ถ้าว่างเปล่ามันจะไม่ถูกตรวจสอบและถ้ามันไม่ว่างเปล่ามันจะถูกตรวจสอบ*/ @pattern (regexp = "^[0-9] {4}-[0-9] {2}-[0-9] {2} $"การตรวจสอบโพสต์อินเทอร์เฟซ BindingResult เป็นชุดของผลลัพธ์ที่ไม่ผ่านการตรวจสอบ:
@RequestMapping ("/demo2") โมฆะสาธารณะ demo2 (@requestbody @valid demomodel demo, ผล bindingresult) {ถ้า (result.haserrors ()) {สำหรับ (ข้อผิดพลาด objecterror: result.getAllerrors ()) {system.out.println - พารามิเตอร์ที่ส่งผ่านโดยคำขอโพสต์ :{"userName":"dd","age":120,"isFalse":true,"birthday":"21010-21-12"}
ผลลัพธ์ผลลัพธ์:
วันเดือนปีเกิดไม่ถูกต้องและต้องเป็นเท็จ
อายุไม่ถูกต้อง
การตรวจสอบพารามิเตอร์นั้นสะดวกมาก หากไม่ผ่านคำอธิบายประกอบ + การตรวจสอบบนฟิลด์จะสามารถแทนที่การเขียนด้วยลายมือของรหัสการตรวจสอบข้อ จำกัด และการ จำกัด สนามจำนวนมาก ด้านล่างเรามีความเข้าใจที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับวิธีการตรวจสอบพารามิเตอร์
3. โหมดการตรวจสอบไฮเบอร์เนต
ผู้อ่านอย่างระมัดระวังจะต้องค้นพบว่าในตัวอย่างข้างต้นชุดทั้งหมดที่ไม่ผ่านการตรวจสอบจะถูกส่งคืนในครั้งเดียว โดยปกติเมื่อฟิลด์แรกไม่ตรงตามข้อกำหนดการตรวจสอบตามลำดับคำขอสามารถปฏิเสธได้โดยตรง Hibernate Validator มีสองโหมดการตรวจสอบดังต่อไปนี้:
1. โหมดปกติ (โหมดนี้เป็นค่าเริ่มต้น)
โหมดปกติ (คุณลักษณะทั้งหมดจะถูกตรวจสอบจากนั้นข้อมูลความล้มเหลวการตรวจสอบทั้งหมดจะถูกส่งคืน)
2. ความล้มเหลวอย่างรวดเร็วในการกลับสู่โหมด
โหมดส่งคืนความล้มเหลวอย่างรวดเร็ว (ส่งคืนตราบเท่าที่มีความล้มเหลวในการตรวจสอบ)
วิธีการกำหนดค่าโหมดการตรวจสอบสองวิธี: (อ้างอิงเอกสารอย่างเป็นทางการ)
Failfast: True Fast Fail Return โหมดเท็จโหมดปกติ
ValidatorFactory ValidatorFactory = การตรวจสอบความถูกต้อง ByProvider (hibernatevalidator.class) .configure () .failfast (จริง) .buildValidatorFactory (); ตัวตรวจสอบความถูกต้องของตัวตรวจสอบความถูกต้อง = ValidatorFactory.getValidator ();
และ (hibernate.validator.fail_fast: True Fail Fail Mode Mode False Normal Mode)
ValidatorFactory ValidatorFactory = การตรวจสอบความถูกต้อง ByProvider (hibernatevalidator.class) .configure () .addproperty ("hibernate.validator.fail_fast", "true") .buildvalidatorfactory (); ตัวตรวจสอบความถูกต้องของตัวตรวจสอบความถูกต้อง = ValidatorFactory.getValidator ();4. การตรวจสอบสองประเภทของไฮเบอร์เนต
กำหนดค่า Hibernate Validator เพื่อส่งคืนโหมดไปยัง Fast Failure:
@ConfigurationPublic คลาส ValidatorConfiguration {@Bean Public Validator Validator () {ValidatorFactory ValidatorFactory = การตรวจสอบความถูกต้อง ByProvider (hibernatevalidator.class) .configure () ตัวตรวจสอบความถูกต้องของตัวตรวจสอบความถูกต้อง = ValidatorFactory.getValidator (); ผู้ตรวจสอบความถูกต้องกลับ; -1. การตรวจสอบพารามิเตอร์การร้องขอ
ดังในตัวอย่างในการสาธิตเมื่อตรวจสอบพารามิเตอร์การร้องขอให้เพิ่ม @Valid ระหว่างการสาธิต @Requestbody DeMomodel จากนั้นเพิ่ม bindIndResult; สำหรับพารามิเตอร์หลายตัวคุณสามารถเพิ่ม @Valid และ bindingResult หลายตัวเช่น:
การทดสอบโมฆะสาธารณะ () ( @requestbody @valid demomodel demo, ผล bindingresult) การทดสอบโมฆะสาธารณะ () ( @requestbody @valid demomodel demo, ผล bindingResult, @questbody @Valid demoModel demo2, bindingResult result2)
@RequestMapping ("/demo2") โมฆะสาธารณะ demo2 (@requestbody @valid demomodel demo, ผล bindingresult) {ถ้า (result.haserrors ()) {สำหรับ (ข้อผิดพลาด objecterror: result.getAllerrors ()) {system.out.println -2. รับการตรวจสอบพารามิเตอร์ (@requestparam การตรวจสอบพารามิเตอร์)
การใช้วิธีการตรวจสอบถั่วไม่มีวิธีตรวจสอบเนื้อหาของ RequestParam โดยทั่วไปเมื่อการประมวลผลรับคำขอ (หรือน้อยกว่าพารามิเตอร์) รหัสต่อไปนี้จะถูกใช้:
@RequestMapping (value = "/demo3", method = requestMethod.get) โมฆะสาธารณะ demo3 (@requestparam (name = "เกรด", ต้องการ = true) เกรด int,@questparam (name = "ห้องเรียน", จำเป็น = จริง) int classroom) -
การใช้คำอธิบายประกอบ @Valid เพื่อใส่หมายเหตุประกอบพารามิเตอร์ที่สอดคล้องกับ RequestParam นั้นไม่ถูกต้อง จำเป็นต้องมีคำอธิบายประกอบ @Validated เพื่อให้การตรวจสอบมีผล ดังที่แสดงด้านล่าง:
. ในเวลานี้คุณต้องใช้ Bean of MethodValidationPostProcessor :
@Bean Public MethodValidationPostProcessor MethodValidationPostProcessor () { / ** ค่าเริ่มต้นเป็นโหมดปกติและการตรวจสอบทั้งหมดจะถูกส่งคืนโดยไม่ผ่านการรวบรวมข้อมูล* / ส่งคืน MethodValidationPostProcessor ใหม่ (); - หรือคุณสามารถตั้งค่าการตรวจสอบความถูกต้องสำหรับ MethodValidationPostProcessor (เนื่องจากตัวตรวจสอบไม่ได้ใช้สำหรับการตรวจสอบในเวลานี้การกำหนดค่าการตรวจสอบความถูกต้องไม่ทำงาน)
@Bean Public MethodValidationPostProcessor MethodValidationPostProcessor () {MethodValidationPostProcessor PostProcessor = MethodValidationPostProcessor (); / ** ตั้งค่าโหมดการตรวจสอบความล้มเหลวอย่างรวดเร็วส่งคืน*/ postprocessor.setValidator (validator ()); ส่งคืนโพสต์โปรเซสเซอร์; } @Bean Public Validator Validator () {ValidatorFactory ValidatorFactory = Validation.byprovider (hibernatevalidator.class) .configure () .addproperty ("hibernate.validator.fail_fast", "True") ตัวตรวจสอบความถูกต้องของตัวตรวจสอบความถูกต้อง = ValidatorFactory.getValidator (); ผู้ตรวจสอบความถูกต้องกลับ; -ข. เพิ่มคำอธิบายประกอบลงในคอนโทรลเลอร์ที่มีวิธีการ @Validated
@RequestMapping (" /การตรวจสอบ")@restController@ValidatedPublic Class ValidationController { /** หากมีวัตถุเพียงไม่กี่วัตถุเพียงแค่เขียนพารามิเตอร์ลงในเลเยอร์คอนโทรลเลอร์แล้วตรวจสอบพวกเขาในเลเยอร์คอนโทรลเลอร์ */ @requestmapping (value = "/ demo3", method = requestMethod.get) โมฆะสาธารณะ Demo3 (@Range (min = 1, max = 9, ข้อความ = "เกรดสามารถจาก 1-9") @requestparam (ชื่อ = "เกรด" 99 ") @RequestParam (name =" ห้องเรียน ", จำเป็น = true) int classroom) {system.out.println (เกรด +", " + ห้องเรียน); -ค. กลับไปที่พรอมต์ข้อมูลการตรวจสอบ
คุณสามารถเห็น: เมื่อการตรวจสอบล้มเหลวข้อยกเว้นข้อ จำกัด การรับรู้จะถูกโยนลงและมีการจัดการข้อยกเว้นแบบเดียวกัน:
@controllerAdvice @componentPublic คลาส globalexceptionhandler {@exceptionhandler @ResponseBody @ResponSestatus (httpstatus.bad_request) การจัดการสตริงสาธารณะ (ข้อยกเว้นการตรวจสอบความถูกต้อง) {ถ้า (ข้อยกเว้น ตั้งค่า <constraintViolation <? >> การละเมิด = exs.getConstraintViolations (); สำหรับ (constraintViolation <?> รายการ: การละเมิด) { / ** พิมพ์ข้อมูลที่ไม่ผ่านการตรวจสอบ* / system.out.println (item.getMessage ()); }} ส่งคืน "คำขอไม่ดี"; -d. การตรวจสอบ
ที่อยู่บริการเบราว์เซอร์บริการ: http: // localhost: 8080/การตรวจสอบ/demo3? grade = 18 & classroom = 888
ข้อมูลเอาต์พุตเมื่อ MethodValidationPostProcessor ส่งคืนโดยไม่ต้องกำหนดค่าความล้มเหลวอย่างรวดเร็วมีดังนี้:
เกรดสามารถอยู่ได้ตั้งแต่ 1-9
คลาสสูงสุดสามารถเป็น 99 เท่านั้น
เมื่อ MethodValidationPostProcessor ได้รับการกำหนดค่าด้วยการส่งคืนความล้มเหลวอย่างรวดเร็วข้อมูลเอาต์พุตจะมีดังนี้:
เกรดสามารถอยู่ได้ตั้งแต่ 1-9
ที่อยู่บริการเบราว์เซอร์บริการ: http: // localhost: 8080/การตรวจสอบ/demo3? grade = 0 & classroom = 0
ข้อมูลเอาต์พุตเมื่อ MethodValidationPostProcessor ส่งคืนโดยไม่ต้องกำหนดค่าความล้มเหลวอย่างรวดเร็วมีดังนี้:
เกรดสามารถอยู่ได้ตั้งแต่ 1-9
คลาสขั้นต่ำสามารถเป็น 1 เท่านั้น
เมื่อ MethodValidationPostProcessor ได้รับการกำหนดค่าด้วยการส่งคืนความล้มเหลวอย่างรวดเร็วข้อมูลเอาต์พุตจะมีดังนี้:
เกรดสามารถอยู่ได้ตั้งแต่ 1-9
3. การตรวจสอบแบบจำลอง
แบบจำลองที่จะตรวจสอบ:
@Datapublic คลาส demo2 {@Length (min = 5, max = 17, message = "ความยาวความยาวอยู่ระหว่าง [5,17]") ความยาวสตริงส่วนตัว; / ** @size ไม่สามารถตรวจสอบจำนวนเต็มเหมาะสำหรับสตริงคอลเลกชันแผนที่และอาร์เรย์*/ @Size (min = 1, สูงสุด = 3, message = "ขนาดระหว่าง [1,3]") อายุสตริงส่วนตัว; @Range (min = 150, สูงสุด = 250, message = "ช่วงอยู่ระหว่าง [150,250]") INT ส่วนตัวสูง; @Size (min = 3, max = 5, message = "ขนาดของรายการอยู่ใน [3,5]") รายการส่วนตัว <String> รายการ;}ตรวจสอบโมเดลการตรวจสอบทั้งหมดต่อไปนี้จะถูกส่งผ่าน:
@Autowired Private Validator Validator; @requestmapping ("/demo3") โมฆะสาธารณะ demo3 () {demo2 demo2 = demo2 ใหม่ (); demo2.setage ("111"); Demo2.Sethigh (150); demo2.setLength ("abcde"); demo2.setList (arrayList ใหม่ <String> () {{เพิ่ม ("111"); เพิ่ม ("222"); เพิ่ม ("333");}}); ตั้งค่า <constraintViolation <DEMO2>> FialationSet = Validator.Validate (DEMO2); สำหรับ (constraintViolation <EMO2> โมเดล: การละเมิด) {system.out.println (model.getMessage ()); -4. การตรวจสอบคาสเคดวัตถุ
วัตถุมีวัตถุอื่นเป็นคุณสมบัติและเพิ่ม @valid ลงในคุณสมบัติเพื่อตรวจสอบการตรวจสอบภายในวัตถุเป็นคุณสมบัติ: (เมื่อตรวจสอบตัวอย่าง Demo2 คุณสามารถตรวจสอบฟิลด์ของ Demo2)
@Datapublic คลาส demo2 {@size (min = 3, max = 5, message = "ขนาดของรายการอยู่ใน [3,5]") รายการส่วนตัว <String> รายการ; @NotNull @Valid ส่วนตัว demo3 demo3;} @datapublic class demo3 {@Length (min = 5, max = 17, message = "ความยาวความยาวอยู่ระหว่าง [5,17]") สตริงส่วนตัว extfield;}การตรวจสอบน้ำตก:
/ ** ถั่วได้รับการกำหนดค่าด้วยการส่งคืนความล้มเหลวอย่างรวดเร็วถั่ว*/ @autowired Private Validator Validator; @requestmapping ("/demo3") โมฆะสาธารณะ demo3 () {demo2 demo2 = demo2 ใหม่ (); demo2.setList (arrayList ใหม่ <String> () {{เพิ่ม ("111"); เพิ่ม ("222"); เพิ่ม ("333");}}); demo3 demo3 = ใหม่ demo3 (); Demo3.Setextfield ("22"); Demo2.SetDemo3 (DEMO3); ตั้งค่า <constraintViolation <DEMO2>> FialationSet = Validator.Validate (DEMO2); สำหรับ (constraintViolation <EMO2> โมเดล: การละเมิด) {system.out.println (model.getMessage ()); -สามารถตรวจสอบฟิลด์ Extfield ของ Demo3 ได้
5. การตรวจสอบกลุ่ม
สรุป: เมื่อตรวจสอบลำดับการจัดกลุ่มให้ตรวจสอบในลำดับการจัดกลุ่มที่ระบุ หากการตรวจสอบก่อนหน้านี้ล้มเหลวการจัดกลุ่มที่ตามมาจะไม่สามารถตรวจสอบได้
มีสถานการณ์ที่เมื่อมีการเพิ่มข้อมูลผู้ใช้ใหม่ไม่จำเป็นต้องตรวจสอบ USERID (เนื่องจากระบบถูกสร้างขึ้น); เมื่อแก้ไขผู้ใช้จำเป็นต้องตรวจสอบผู้ใช้และฟังก์ชั่นการตรวจสอบกลุ่มของผู้ใช้เพื่อตรวจสอบความถูกต้อง
ตั้งค่าการตรวจสอบความถูกต้องเป็นโหมดการตรวจสอบปกติ ("hibernate.validator.fail_fast", "false") และใช้การตรวจสอบ Groupa, GroupB และรุ่น:
Groupa, GroupB: อินเตอร์เฟสสาธารณะ Groupa {} ส่วนต่อประสานสาธารณะ GroupB {}ตรวจสอบรูปแบบ: บุคคล
@Datapublic คลาสคลาส {@NotBlank @Range (min = 1, max = integer.max_value, message = "ต้องมากกว่า 0", กลุ่ม = {groupa.class}) / ** รหัสผู้ใช้* / ผู้ใช้จำนวนเต็มส่วนตัว; @NotBlank @Length (min = 4, max = 20, message = "ต้องอยู่ใน [4,20]", กลุ่ม = {GroupB.class}) / ** ชื่อผู้ใช้* / ชื่อผู้ใช้สตริงส่วนตัว; @NotBlank @Range (min = 0, max = 100, message = "อายุต้องอยู่ที่ [0,100]", กลุ่ม = {default.class}) / ** อายุ* / อายุจำนวนเต็มส่วนตัว; @Range (min = 0, max = 2, message = "เพศต้องอยู่ที่ [0,2]", กลุ่ม = {GroupB.class}) /** เพศ 0: ไม่ทราบ; 1: ชาย; 2: เพศหญิง*/ เซ็กซ์จำนวนเต็มส่วนตัว;}ดังที่แสดงในตนเองข้างต้นทั้งสามกลุ่มได้รับการตรวจสอบตามลำดับดังนี้:
. การจัดกลุ่ม
มีการตรวจสอบการจัดกลุ่มของกลุ่ม Groupa และ GroupB เท่านั้น:
@RequestMapping ("/demo5") โมฆะสาธารณะ demo5 () {person p = บุคคลใหม่ (); / ** การตรวจสอบกลุ่มไม่ผ่าน*/ p.setUserId (-12); /** การตรวจสอบ Groupa Pass*//p.setUserId(12); P.Setusername ("A"); P.Setage (110); P.Setsex (5); ตั้งค่า <constraintViolation <person>> qualidate = validator.validate (P, Groupa.class, GroupB.Class); สำหรับ (constraintViolation <person> รายการ: ตรวจสอบ) {system.out.println (รายการ); -หรือ
@requestmapping ("/demo6") โมฆะสาธารณะ demo6 (@validated ({groupa.class, GroupB.class}) บุคคล p, ผลการเชื่อมโยงผล) {ถ้า (result.haserrors ()) {รายการ <objecterror> Allerrors = result.getAllerrors (); สำหรับ (ข้อผิดพลาด OBJECTERROR: AllERRORS) {System.out.println (ข้อผิดพลาด); -หาก Groupa, GroupB และค่าเริ่มต้นไม่ได้รับการตรวจสอบ:
ข้อมูลการตรวจสอบมีดังนี้:
ConstraintViolationImpl {interpolatedMessage = 'ต้องอยู่ใน [4,20]', propertyPath = ชื่อผู้ใช้, rootBeanClass = rootator.demo.project.model.person, messagetemplate = 'ต้องอยู่ใน [4,20]' validator.demo.project.model.person, messagetemplate = 'ต้องมากกว่า 0'} constraintViolationimpl {interpolatedMessage = 'เพศต้องอยู่ใน [0,2]', propertypath = เพศ, rootBeanClass = class Validator.demo.project.หากผ่านการตรวจสอบ Groupa GroupB และการตรวจสอบเริ่มต้นจะไม่ผ่าน:
ข้อมูลการตรวจสอบมีดังนี้:
ConstraintViolationImpl {interpolatedMessage = 'ต้องอยู่ใน [4,20]', propertyPath = ชื่อผู้ใช้, rootBeanClass = class dalidator.demo.project.model.person, messagetemplate = 'ต้องอยู่ใน [4,20]'} constraintViolationimpl rootBeanClass = class validator.demo.project.model.person, messagetemplate = 'เพศต้องอยู่ใน [0,2]'}ข. ลำดับกลุ่ม
นอกเหนือจากการระบุว่าจะตรวจสอบโดยกลุ่มคุณยังสามารถระบุลำดับการตรวจสอบของกลุ่มได้หรือไม่ หากการตรวจสอบของกลุ่มก่อนหน้าล้มเหลวการตรวจสอบของกลุ่มถัดไปจะไม่ดำเนินการ:
ลำดับของกลุ่มที่ระบุ (Groupa》 GroupB》 เริ่มต้น):
@groupequence ({Groupa.class, GroupB.class, default.class}) Interface Public Grouporder {}ทดสอบตัวอย่าง:
@RequestMapping ("/demo7") โมฆะสาธารณะ demo7 () {บุคคล p = บุคคลใหม่ (); /** การตรวจสอบ Groupa ไม่ผ่าน*//p.setUserId(-12); / ** การตรวจสอบ Groupa Pass*/ P.SetUserId (12); P.Setusername ("A"); P.Setage (110); P.Setsex (5); ตั้งค่า <constraintViolation <person >> qualidate = validator.validate (p, grouporder.class); สำหรับ (constraintViolation <person> รายการ: ตรวจสอบ) {system.out.println (รายการ); -หรือ
@requestmapping ("/demo8") โมฆะสาธารณะ demo8 (@validated ({grouporder.class}) บุคคล p, ผล bindingresult) {ถ้า (result.haserrors ()) {รายการ <objecterror> allerRors = result.getAllERrors (); สำหรับ (ข้อผิดพลาด OBJECTERROR: AllERRORS) {System.out.println (ข้อผิดพลาด); -หาก Groupa, GroupB และค่าเริ่มต้นไม่ได้รับการตรวจสอบ:
ข้อมูลการตรวจสอบมีดังนี้:
constraintViolationImpl {interpolatedMessage = 'ต้องมากกว่า 0', propertyPath = userId, rootBeanClass = class dalidator.demo.project.model.person, messagetemplate = 'ต้องมากกว่า 0'}หากผ่านการตรวจสอบ Groupa GroupB และการตรวจสอบเริ่มต้นจะไม่ผ่าน:
ข้อมูลการตรวจสอบมีดังนี้:
ConstraintViolationImpl {interpolatedMessage = 'ต้องอยู่ใน [4,20]', propertyPath = ชื่อผู้ใช้, rootBeanClass = class dalidator.demo.project.model.person, messagetemplate = 'ต้องอยู่ใน [4,20]'} constraintViolationimpl rootBeanClass = class validator.demo.project.model.person, messagetemplate = 'เพศต้องอยู่ใน [0,2]'}สรุป: เมื่อตรวจสอบลำดับการจัดกลุ่มให้ตรวจสอบในลำดับการจัดกลุ่มที่ระบุ หากการตรวจสอบก่อนหน้านี้ล้มเหลวการจัดกลุ่มที่ตามมาจะไม่สามารถตรวจสอบได้
5. ตัวตรวจสอบที่กำหนดเอง
โดยทั่วไปการตรวจสอบแบบกำหนดเองสามารถแก้ปัญหาได้มากมาย แต่ก็มีบางครั้งที่สถานการณ์ไม่สามารถพบได้ ในเวลานี้เราสามารถใช้อินเทอร์เฟซ Validator และปรับแต่งตัวตรวจสอบที่เราต้องการ
ดังที่แสดงไว้ด้านล่างมีการใช้งานตัวตรวจสอบกรณีที่กำหนดเอง:
public enum casemode {Upper, Lower;}@Target ({ElementType.method, ElementType.field, ElementType.Annotation_type})@retention (retentionPolicy.runtime) @Constraint คลาส <?> [] กลุ่ม () ค่าเริ่มต้น {}; ชั้นเรียน <? ขยาย payload> [] payload () ค่าเริ่มต้น {}; caseMode value ();} checkcasevalidator คลาสสาธารณะใช้ constraintValidator <HEXTCASE, string> {casemode ส่วนตัว casemode; โมฆะสาธารณะเริ่มต้น (CheckCase CheckCase) {this.casemode = checkcase.value (); } บูลีนสาธารณะ isValid (สตริง s, constraintValidatorContext constraintValidatorContext) {ถ้า (s == null) {return true; } if (casemode == casemode.upper) {return s.equals (s.touppercase ()); } else {return s.equals (S.ToLowerCase ()); -แบบจำลองการตรวจสอบ:
การสาธิตคลาสสาธารณะ {@checkcase (value = casemode.lower, message = "ชื่อผู้ใช้ต้องเป็นตัวพิมพ์เล็ก") ชื่อผู้ใช้สตริงส่วนตัว; สตริงสาธารณะ getUserName () {ส่งคืนชื่อผู้ใช้; } โมฆะสาธารณะ setUserName (ชื่อผู้ใช้สตริง) {this.userName = ชื่อผู้ใช้; -การกำหนดค่าการตรวจสอบความถูกต้อง:
@Bean Public Validator Validator () {ValidatorFactory ValidatorFactory = การตรวจสอบความถูกต้อง byprovider (hibernatevalidator.class) .configure () .addproperty ("hibernate.validator.fail_fast", "true") ตัวตรวจสอบความถูกต้องของตัวตรวจสอบความถูกต้อง = ValidatorFactory.getValidator (); ผู้ตรวจสอบความถูกต้องกลับ; -การทดสอบการตรวจสอบ:
@RequestMapping ("/demo4") โมฆะสาธารณะ demo4 () {สาธิตสาธิต = การสาธิตใหม่ (); demo.setUsername ("ชื่อผู้ใช้"); SET <constraintViolation <การสาธิต >> validate = validator.validate (การสาธิต); สำหรับ (constraintViolation <EMO> DEM: ตรวจสอบความถูกต้อง) {System.out.println (dem.getMessage ()); -ผลลัพธ์ผลลัพธ์:
ชื่อผู้ใช้จะต้องเป็นตัวพิมพ์เล็ก
6. คำอธิบายประกอบทั่วไป
ข้อ จำกัด ในตัวในการตรวจสอบถั่ว @Null องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็น null @NotNull องค์ประกอบที่มีคำอธิบายประกอบจะต้องไม่เป็นค่า null @ASSERTTRUE องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นจริง @ASSERTFALSE องค์ประกอบที่อธิบายไว้จะต้องเป็นค่าเท็จ ในค่าสูงสุดที่ระบุ @decimalmin (ค่า) องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นตัวเลขค่าของมันจะต้องสูงกว่าหรือเท่ากับค่าต่ำสุดที่ระบุ @decimalmax (ค่า) องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นตัวเลขจะต้องน้อยกว่าหรือเท่ากับค่าสูงสุดที่ระบุไว้ องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นตัวเลขและค่าของมันจะต้องอยู่ในช่วงที่ยอมรับได้ @past องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นวันที่ผ่านมา @Future องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นวันที่ในอนาคต @Pattern (regex =, Flag =) องค์ประกอบที่มีการรวมจะต้องตรงกับการตรวจสอบความถูกต้อง @Length (min =, max =) สตริงคำอธิบายประกอบต้องอยู่ในช่วงที่ระบุ @NotEmpty สตริงที่มีคำอธิบายประกอบจะต้องไม่ว่างเปล่า @Range (min =, max =, message =) องค์ประกอบที่มีคำอธิบายประกอบต้องอยู่ในช่วงที่เหมาะสม 0.01@notnull@decimalmin (value = "0.01" รวมถึง = true) ส่วนตัว bigdecimal greatorequalthan; @length (min = 1, max = 20, ข้อความ = "ข้อความไม่สามารถว่างเปล่า") // ไม่สามารถใช้ความยาวเป็นช่วง //@range (min = 1, max = 20, ข้อความ = "ข้อความ
7. วัสดุอ้างอิง
ข้อมูลอ้างอิง:
http://docs.jboss.org/hibernate/validator/4.2/reference/zh-cn/html_single/#validator-gettingstarted