คำนำ
องค์ประกอบการตรวจสอบความถูกต้องของเฟรมเวิร์กสปริงเป็นองค์ประกอบเสริมซึ่งมีประโยชน์มากสำหรับความสมบูรณ์ของข้อมูลและความถูกต้อง โดยการกำหนดตัวตรวจสอบความถูกต้องบางอย่างสามารถใช้ในสถานที่อื่น ๆ ที่จำเป็นและเป็นเรื่องธรรมดามาก
ก่อนที่จะดำเนินการตรรกะทางธุรกิจมีความจำเป็นเพื่อให้แน่ใจว่าข้อมูลอินพุตที่ได้รับนั้นถูกกฎหมายและถูกต้องผ่านการตรวจสอบ อย่างไรก็ตามหลายครั้งการตรวจสอบเดียวกันเกิดขึ้นหลายครั้งซึ่งนำไปสู่การซ้ำซ้อนของรหัสเสียเวลาและละเมิดหลักการแห้ง
คุณสามารถพิจารณาห่อหุ้มรหัสการยืนยันเพื่อแก้ปัญหาเหล่านี้
JSR-303
JSR-303 เป็นกรอบมาตรฐานที่จัดทำโดย Java สำหรับการตรวจสอบความถูกต้องตามกฎหมายของข้อมูลถั่ว มันกำหนดชุดของคำอธิบายประกอบการตรวจสอบที่สามารถใส่คำอธิบายประกอบกับตัวแปรสมาชิกและวิธีการใช้งาน
การตรวจสอบความถูกต้องของไฮเบอร์เนตให้ชุดของการใช้งานมาตรฐานนี้ เมื่อเราแนะนำ Spring Boot Web Starter หรือ Spring Boot Starter การตรวจสอบความถูกต้องของ HiberNate จะมีการแนะนำโดยค่าเริ่มต้น
ตัวอย่างการใช้งาน
หลังจากพูดเรื่องไร้สาระมากแล้วเพิ่มรหัส
1. แนะนำโครงการ Springboot
<การพึ่งพา> <roupId> org.springframework.boot </groupId> <ratifactid> Spring-Boot-Starter-Web </artifactid> </การพึ่งพาอาศัย> <การพึ่งพา> <roupid> org.hibernate.validator </groupid> <การพึ่งพา> <roupId> org.projectlombok </groupId> <ratifactid> Lombok </artifactid> </derctency>
2. การเขียนวัตถุตรวจสอบ
ผู้ใช้ @Datapublic Class {// ชื่อไม่ได้รับอนุญาตให้ว่างเปล่าและความยาวของชื่ออยู่ระหว่าง 2 และ 30 บิต // ถ้าความยาวของชื่อไม่ผ่านแล้วข้อความแสดงข้อผิดพลาดจะได้รับแจ้ง @NotNull @Size (min = 2, max = 30, message = "โปรดตรวจสอบว่ามีปัญหาใด ๆ // ชื่อไม่ได้รับอนุญาตให้ว่างเปล่าและอายุขั้นต่ำคือ 18 @NotNull @min (18) อายุจำนวนเต็มส่วนตัว;}3. สร้างคอนโทรลเลอร์
@springbootapplication@restcontrollerpublic คลาส userapplication {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {springapplication.run (userapplication.class, args); } // 1. เพิ่ม @Valid คำอธิบายประกอบก่อนที่จะตรวจสอบพารามิเตอร์ // 2 ติดตามทันทีให้ติดตาม bindingResult เพื่อจัดเก็บข้อมูลการตรวจสอบ @requestmapping ("/test1") การทดสอบวัตถุสาธารณะ 1 (@valid ผู้ใช้ผู้ใช้ ในความเป็นจริงข้อมูลที่กำหนดเองสามารถส่งคืนได้ตามวิธี BindingResult ตามต้องการ // วิธีแก้ปัญหาปกติคือ: JSR-303 + Global ExceptionHandler ถ้า (bindingResult.haserrors ()) {ส่งคืน bindingResult.getAllerRors (); } return "ตกลง"; - 4. เรียกใช้แอปพลิเคชัน
หลังจากการสาธิตสั้น ๆ เกี่ยวกับผลลัพธ์ของการดำเนินการจะเห็นได้ว่ากรอบการตรวจสอบมีผล
ตรวจอายุ
ยืนยันชื่อ
ผ่านการตรวจสอบ
คำอธิบายประกอบการตรวจสอบทั่วไป
@null องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นโมฆะ
@notnull องค์ประกอบที่มีคำอธิบายประกอบจะต้องไม่เป็นโมฆะ
@asserttrue องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นจริง
@ASSERTFALSE องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นเท็จ
@min (ค่า) องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นตัวเลขและค่าของมันจะต้องมากกว่าหรือเท่ากับค่าต่ำสุดที่ระบุ
@max (ค่า) องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นตัวเลขและค่าของมันจะต้องน้อยกว่าหรือเท่ากับค่าสูงสุดที่ระบุ
@decimalmin (ค่า) องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นตัวเลขและค่าของมันจะต้องมากกว่าหรือเท่ากับค่าต่ำสุดที่ระบุ
@DecimalMax (ค่า) องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นตัวเลขและค่าของมันจะต้องน้อยกว่าหรือเท่ากับค่าสูงสุดที่ระบุ
@Size (max =, min =) ขนาดขององค์ประกอบที่มีคำอธิบายประกอบต้องอยู่ในช่วงที่ระบุ
@Digits (จำนวนเต็ม, เศษส่วน) องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นตัวเลขและค่าของมันจะต้องอยู่ในช่วงที่ยอมรับได้
@past องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นวันที่ผ่านมา
@Future องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นวันที่ในอนาคต
@pattern (regex =, flag =) องค์ประกอบที่มีคำอธิบายประกอบต้องสอดคล้องกับนิพจน์ทั่วไปที่ระบุ
ตรวจสอบคำอธิบายประกอบที่จัดทำโดย Hibernate Validator:
@NotBlank (message =) ตรวจสอบว่าสตริงไม่เป็นโมฆะและต้องมากกว่า 0
@Email องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นที่อยู่อีเมล
@Length (min =, max =) ขนาดของสตริงหมายเหตุประกอบต้องอยู่ในช่วงที่ระบุ
@NotEmpty สตริงความคิดเห็นจะต้องไม่ว่างเปล่า
@Range (min =, max =, message =) องค์ประกอบที่มีคำอธิบายประกอบต้องอยู่ในช่วงที่เหมาะสม
คำอธิบายประกอบการตรวจสอบที่กำหนดเอง
บางครั้งประเภทการตรวจสอบที่เราต้องการไม่ได้อยู่ในห้องสมุดบุคคลที่สาม โชคดีที่ระบบให้ความสามารถในการขยายตัวที่ดีและเราสามารถปรับแต่งการตรวจสอบได้
ตัวอย่างเช่นเราต้องการตรวจสอบรูปแบบโทรศัพท์มือถือของผู้ใช้และเขียนอุปกรณ์ยืนยันหมายเลขโทรศัพท์มือถือ
1. คำอธิบายประกอบการตรวจสอบการตรวจสอบ
// เราสามารถคัดลอกคำอธิบายประกอบโดยตรงในระบบเช่น @min คัดลอกลงในคำอธิบายประกอบใหม่ของเราแล้วแก้ไขตามต้องการ @Target ({วิธีการ, ฟิลด์, คำอธิบายประกอบ _Type, คอนสตรัคเตอร์, พารามิเตอร์})@การเก็บรักษา (รันไทม์)@เอกสาร // คลาสการใช้งานของคำอธิบายประกอบ @ConstraInt (ตรวจสอบแล้ว = {isMobileValidator.class}) สาธารณะ @interface ismobile {// ข้อมูลเริ่มต้นสำหรับการตรวจสอบข้อผิดพลาดข้อความสตริง () ค่าเริ่มต้น "มีปัญหากับรูปแบบหมายเลขโทรศัพท์มือถือ"; // ว่าจะบังคับให้มีการตรวจสอบบูลีน isrequired () เท็จเริ่มต้นหรือไม่; คลาส <?> [] กลุ่ม () ค่าเริ่มต้น {}; ชั้นเรียน <? ขยาย payload> [] payload () ค่าเริ่มต้น {};} 2. เขียนคลาสการใช้งานเฉพาะ
เรารู้ว่าคำอธิบายประกอบเป็นเพียงเครื่องหมายและตรรกะจริงจะต้องนำไปใช้ในชั้นเรียนเฉพาะ คำอธิบายประกอบในขั้นตอนก่อนหน้าระบุว่าคลาสที่ใช้ฟังก์ชั่นการตรวจสอบคือ ismobilevalidator
// คำอธิบายประกอบที่กำหนดเองจะต้องใช้อินเทอร์เฟซ ConstraintValidator, พารามิเตอร์สองตัวใน IT // ครั้งแรกคือคำอธิบายประกอบเฉพาะที่จะตรวจสอบ // ที่สองคือประเภทพารามิเตอร์ของคลาสสาธารณะการตรวจสอบ Ismobilevalidator ใช้ข้อ จำกัด รูปแบบสุดท้ายคงที่ส่วนตัว mobile_pattern = pattern.compile ("1 // d {10}"); // วิธีการเครื่องมือตรวจสอบว่าเป็นหมายเลขโทรศัพท์มือถือสาธารณะบูลีนคงที่ ismobile (สตริง src) {ถ้า (stringutils.isempty (src)) {return false; } matcher m = mobile_pattern.matcher (src); กลับ M.Matches (); } @Override โมฆะสาธารณะเริ่มต้น (ismobile constraintAntation) {จำเป็น = constraintAnnotation.isrequired (); } @Override บูลีนสาธารณะ isValid (สตริงโทรศัพท์, constraintValidatorContext constreintValidatorContext) {// เป็นการใช้หมายเลขโทรศัพท์มือถือหรือไม่ถ้า (จำเป็น) {return isMobile (โทรศัพท์); } else {ถ้า (stringutils.isempty (โทรศัพท์)) {return true; } else {return ismobile (โทรศัพท์); - 3. ทดสอบฟังก์ชั่นของคำอธิบายประกอบที่กำหนดเอง
@Datapublic ผู้ใช้คลาส {@NotNull @Size (min = 2, max = 30, message = "โปรดตรวจสอบว่ามีปัญหาใด ๆ กับความยาวของชื่อ") ชื่อสตริงส่วนตัว; @notnull @min (18) อายุจำนวนเต็มส่วนตัว; // นี่คือโทรศัพท์สตริงส่วนตัว @ismobile ส่วนตัวที่เพิ่มขึ้นใหม่}}4. ทดสอบ
ผ่าน
มีปัญหากับหมายเลขโทรศัพท์มือถือ
จะเห็นได้ว่าคำอธิบายประกอบที่กำหนดเองมีผล
นอกจากนี้เรายังสามารถเพิ่มประสิทธิภาพสถานที่และสร้างข้อยกเว้นระดับโลกใหม่ได้ หากการตรวจสอบล้มเหลวให้โยนข้อยกเว้นทางธุรกิจทั่วโลกจับข้อยกเว้นทางธุรกิจแล้วส่งคืนข้อมูลแจ้งที่เป็นมิตรกับผู้ใช้
เพิ่มเติม
นอกจากนี้ยังสามารถผ่านการตรวจสอบของวิธีการ
1. เพิ่มคำอธิบายประกอบ @Validated ลงในคอนโทรลเลอร์
2. เพิ่มคำอธิบายประกอบการตรวจสอบ, @min, @max ฯลฯ ไปยังวิธีการควบคุม
@ตรวจสอบความถูกต้อง@restcontroller@springbootapplicationpublic คลาส userapplication {public static void main (string [] args) {springapplication.run (userapplication.class, args); } @RequestMapping ("/test2") สตริงสาธารณะ test2 (@ismobile สตริงโทรศัพท์) {ส่งคืนโทรศัพท์ + "ตกลง"; } @ExceptionHandler (constraintViolationException.class) @ResponseBody วัตถุสาธารณะ handleConstraintViolationException (constraintViolationException CVE) {HASHSET <String> messageet = new HashSet (); สำหรับ (constraintViolation ข้อ จำกัด : cve.getConstraintViolations ()) {messageset.add (constraintViolation.getMessage ()); } ส่งคืนข้อความ; - กฎการตรวจสอบชั้นเรียน
ในที่สุด
โดยใช้อุปกรณ์ตรวจสอบเราไม่จำเป็นต้องตรวจสอบตัวควบคุมทั้งหมดอีกต่อไป หากรหัสสดชื่นมากมันจะเป็น เราเขียนโค้ดสั้น ๆ แต่เราต้องคิดเกี่ยวกับวิธีการเขียนโค้ดที่ง่ายขึ้นชัดเจนและเอื้อต่อการบำรุงรักษามากขึ้น การเขียนรหัสที่ซ้ำกันเป็นการเสียเวลาของคุณ
เมื่อคุณพบการตรวจสอบพารามิเตอร์ในอนาคตสิ่งแรกที่คุณคิดคือไม่ต้องตรวจสอบโดยตรง คุณสามารถค้นหาได้ว่าคุณได้เขียนคำตรวจบางประเภทและคุณสามารถใช้งานได้โดยตรง
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com