การพัฒนาเว็บสปริงการพัฒนาเว็บบางครั้งจำเป็นต้องทำการตรวจสอบขั้นพื้นฐานของพารามิเตอร์ที่ส่งผ่านโดยเลเยอร์คอนโทรลเลอร์เช่นไม่ว่างเปล่าช่วงของค่าจำนวนเต็มความยาวของสตริงวันที่อีเมล ฯลฯ สปริงรองรับ API การตรวจสอบความถูกต้องของถั่ว JSR-303 ซึ่งสามารถตรวจสอบได้ง่าย
ใช้คำอธิบายประกอบสำหรับการตรวจสอบ
ก่อนกำหนดวัตถุการห่อหุ้มแบบฟอร์ม
คลาส requestForm {@Size (min = 1, max = 5) ชื่อสตริงส่วนตัว; สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; -ฟิลด์ชื่อถูก จำกัด ที่ความยาว 1 ถึง 5 ด้วยคำอธิบายประกอบขนาด ขนาดเป็นคำอธิบายประกอบข้อ จำกัด ในแพ็คเกจ Javax.Validation
เมื่อใช้คำอธิบายประกอบ @Valid หมายความว่าจะต้องตรวจสอบถั่ว
@ResponseBody @getMapping (value = "Bean") การตรวจสอบสตริงสาธารณะ (@Valid Request Form Request) {System.out.println (request.getName ()); กลับ "ตกลง"; -คำอธิบายประกอบที่กำหนดเอง
หากคำอธิบายประกอบในตัวไม่เพียงพอคุณสามารถปรับแต่งคำอธิบายประกอบได้
ตัวอย่างเช่นแรกกำหนดคำอธิบายประกอบ nameconstraint และ จำกัด ฟิลด์ชื่อที่จะเลือกจากข้อมูลเฉพาะ
@Target ({ElementType.field, ElementType.Parameter})@retention (RetentionPolicy.runtime) @Constraint (ตรวจสอบแล้ว = nameconstraintValidator.class) @interface nameconstraint {String [] คลาส <?> [] กลุ่ม () ค่าเริ่มต้น {}; ชั้นเรียน <? ขยาย payload> [] payload () ค่าเริ่มต้น {}; ข้อความสตริง ();}หากได้รับอนุญาตให้แสดงถึงช่วงมูลค่าทางกฎหมายและข้อความคือข้อมูลการแสดงผลสำหรับความล้มเหลวในการตรวจสอบ
ข้อความกลุ่มและน้ำหนักบรรทุกเป็นฟิลด์ที่ต้องการโดย Hibernate Validator หากคุณต้องการทราบโปรดดูเอกสารอย่างเป็นทางการ
กำหนดตัวตรวจสอบความถูกต้องสำหรับการตรวจสอบจริง
คลาส nameconstraintValidator ใช้ constraintValidator <nameconstraint, string> {สตริงส่วนตัว [] validValues; @Override โมฆะสาธารณะเริ่มต้น (nameconstraint constraintAntation) {validValues = constraintAnnotation.allowedValues (); } @Override บูลีนสาธารณะ isValid (ค่าสตริง, บริบท constraintValidatorContext) {สำหรับ (สตริง s: this.validValues) {ถ้า (s.equals (value)) {return true; }} return false; -ใช้ในรูปแบบถั่วดังนี้
class requestFormWithCustomConstraint {@NameConstraint (อนุญาต Values = {"bar", "foo"}, message = "เฉพาะบาร์, foo") ชื่อสตริงส่วนตัว; สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; -การตรวจสอบพารามิเตอร์โดยตรง
ฉันควรทำอย่างไรถ้าฉันไม่ต้องการห่อหุ้มวัตถุ พารามิเตอร์นี้สามารถตรวจสอบได้โดยตรง
@controller@chalidated@requestmapping (value = "validator") คลาสสาธารณะ ParameterValIdAtOdEmocontroller {@ResponseBody @getMapping (value = "simple") Public String Varidateparameter (@Size (min = 1, max = 5) ชื่อสตริง) {system.out.println (ชื่อ); กลับ "ตกลง"; -คำอธิบายประกอบ @Validated ด้านบนคอนโทรลเลอร์บอกสปริงว่าจำเป็นต้องสแกนคลาสนี้เพื่อตรวจสอบคำอธิบายประกอบข้อ จำกัด
สำหรับรายละเอียดโปรดดูบทที่เกี่ยวข้องของเอกสารอย่างเป็นทางการ
https://docs.spring.io/spring-boot/docs/1.5.9.release/reference/htmlsingle/#boot-features-validation
https://docs.spring.io/spring/docs/4.3.16.release/spring-framework-reference/htmlsingle/#validation-beanvalidation
รหัสบน gitHub
https://github.com/kabike/spring-boot-demo
สรุป
ด้านบนเป็นคำอธิบายโดยละเอียดของวิธีการตรวจสอบพารามิเตอร์การบูตสปริงที่แนะนำโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉัน บรรณาธิการจะตอบกลับคุณทันเวลา!