ในความเป็นจริงมันเป็นวิธีที่สามารถใช้ในการกำหนดคำอธิบายประกอบที่กำหนดเองผ่าน @Constraint
@Constraint (ตรวจสอบแล้ว = xxxx.class)
ด้านล่างเป็นตัวอย่างรหัสของคำอธิบายประกอบแบบกำหนดเอง Java ที่ฉันทำเพื่อใช้การตรวจสอบพารามิเตอร์ด้านหน้าและแบ็กเอนด์
หากคุณสนใจสิ่งนี้โปรดอ่านอย่างระมัดระวังและเรียนรู้อย่างรอบคอบ:
แพ็คเกจ sonn.sonnannotation; นำเข้า java.lang.annotation.documented; นำเข้า java.lang.annotation.elementtype; นำเข้า java.lang.annotation.retention; นำเข้า java.lang.annotation.RetentionPolicy; javax.validation.constraintvalidator; นำเข้า Javax.validation.constraintValidatorContext; นำเข้า Javax.validation.payload; นำเข้า sonn.util.stringutill;/*** @classname: isvalidstring* @description 2016-7-25 8:22:58 PM * @Version 1.0 */@เป้าหมาย ({ElementType.field, ElementType.Method})@retention (RETINGIONPICALY.RUNTIME) @Constraint (chratidatedBy = ISVALIDSTRING.VALIDSTRINGCHECKER.CLASS) ไม่ถูกต้อง."; คลาส <?> [] กลุ่ม () ค่าเริ่มต้น {}; ชั้นเรียน <? ขยาย payload> [] payload () ค่าเริ่มต้น {}; Class ValidStringChecker ใช้ข้อ จำกัด <SvalidString, string> {@Override โมฆะสาธารณะเริ่มต้น (isValidstring arg0) {} @Override บูลีนสาธารณะ isValid } if (strvalue.contains ("<")) {return false; } return true; -รหัสข้างต้นกำหนดตรรกะวิธีการของคำอธิบายประกอบผ่าน @Constraint (ตรวจสอบแล้ว = isValidString.ValidStringChecker.class)-คลาสชั้นในของคลาสคำอธิบายประกอบชื่อ ValidstringChecker
คลาสภายในนี้ใช้ constraintValidator <isValidstring, string> อินเตอร์เฟส
เอกสารอย่างเป็นทางการอธิบายเช่นนี้:
javax.validation
Interface ConstraintValidator <a ขยายคำอธิบายประกอบ, t>
-
-
Interface ConstraintValidator <a ขยายคำอธิบายประกอบ, t> กำหนดตรรกะเพื่อตรวจสอบข้อ จำกัด ที่กำหนดสำหรับประเภทวัตถุที่กำหนด t
การใช้งานจะต้องปฏิบัติตามข้อ จำกัด ต่อไปนี้:
• t ต้องแก้ไขเป็นประเภทที่ไม่ได้พารามิเตอร์
•หรือพารามิเตอร์ทั่วไปของ T จะต้องเป็นประเภทไวด์การ์ดที่ไม่มีขอบเขต
คำอธิบายประกอบการสนับสนุนการกำหนดเป้าหมายสามารถนำไปใช้ในการใช้งาน ContraintValidator เพื่อทำเครื่องหมายว่าเป็นการสนับสนุนข้อ จำกัด ข้ามพารามิเตอร์ ตรวจสอบ SupportedValidationTarget และข้อ จำกัด สำหรับข้อมูลเพิ่มเติม
วิธีการ isvalid ที่ใช้เป็นวิธีการตรวจสอบของอินเทอร์เฟซนี้
ทดสอบเอฟเฟกต์และเพิ่มคำอธิบายประกอบลงในฟิลด์คลาสเอนทิตีเพื่อตรวจสอบ:
เขียนหน้าบทความเพิ่ม '<' ในชื่อบทความและส่ง:
การส่งล้มเหลวโดยมีข้อผิดพลาด 500 ระบุว่าคำอธิบายประกอบมีผล:
แต่ยังมีปัญหากับเรื่องนี้ เว็บไซต์บล็อกของฉันไม่สามารถพิมพ์ข้อความแสดงข้อผิดพลาดได้โดยตรง คุณยังต้องสร้างหน้าข้อผิดพลาด
นี่เป็นเรื่องง่ายเพิ่มพา ธ หน้าข้อผิดพลาดภายใต้ web.xml จากนั้นสร้างหน้า:
<ข้อผิดพลาดหน้า>
<Rorror-Code> 500 </ข้อผิดพลาด-รหัส>
<location>/error.jsp </location>
</ข้อผิดพลาดหน้า>
ก่อนอื่นมาแนะนำแนวคิดพื้นฐาน:
1.Java กำหนดคำอธิบายประกอบด้วย @Interface XX {}
คำอธิบายประกอบนั้นไม่ใช่เรื่องลึกลับ แต่เป็นเพียงเครื่องหมาย เมื่อโปรแกรมทำงานที่เครื่องหมายจะดำเนินการตรรกะที่เกี่ยวข้อง คำอธิบายประกอบตัวเองเป็นชั้นเรียน
2. เมื่อกำหนดคำอธิบายประกอบการติดฉลากคำอธิบายประกอบบางอย่างสามารถแสดงถึงความหมายเฉพาะ:
@Retention (RESINGINTPOLICY.SOURCE) // คำอธิบายประกอบมีอยู่ในซอร์สโค้ดเท่านั้นและไม่มีอยู่ในไฟล์ ByTeCode คลาส
@Retention (REVENINGPOLICY.CLASS) // นโยบายการเก็บรักษาเริ่มต้นคำอธิบายประกอบจะมีอยู่ในไฟล์คลาสไบต์ แต่ไม่สามารถรับได้ในระหว่างการรันไทม์
@Retention (REVENITIONPICALY.RUNTIME) // คำอธิบายประกอบจะมีอยู่ในไฟล์คลาส BYTECODE และสามารถรับได้ผ่านการสะท้อนกลับที่รันไทม์
(รันไทม์เป็นสิ่งที่ควรค่าแก่การสังเกตเพราะมันหมายความว่าสามารถเรียกคืนได้โดยการสะท้อนกลับ)
@Target (ElementType.type) // อินเทอร์เฟซ, คลาส, การแจงนับ, คำอธิบายประกอบ
@Target (ElementType.field) // ค่าคงที่สำหรับฟิลด์และ enums
@Target (ElementType.method) // เมธอด
@Target (ElementType.Parameter) // พารามิเตอร์เมธอด
@Target (ElementType.Constructor) // Constructor
@Target (ElementType.local_Variable) // ตัวแปรท้องถิ่น
@target (elementtype.annotation_type) // คำอธิบายประกอบ
@Target (ElementType.Package) // แพ็คเกจ
มีวิธีเพิ่ม @taget (xx) และ @retention (RetentionPolicy.runtime) เมื่อกำหนดคำอธิบายประกอบ แต่อย่าเขียนวิธีการในคำอธิบายประกอบ พวกเขาใช้กลไกการสะท้อนกลับเพื่อรับคำอธิบายประกอบที่รันไทม์แล้วเขียนตรรกะที่เกี่ยวข้องด้วยตัวเอง (ตัวแยกวิเคราะห์คำอธิบายประกอบที่เรียกว่า)
อาจเป็นวิธีที่คล้ายกันในการเขียน:
นำเข้า java.lang.annotation.documented; นำเข้า java.lang.annotation.elementtype; นำเข้า java.lang.annotation.inherited; นำเข้า java.lang.annotation.retention; นำเข้า java.lang.annotation.retention ElementType.field, ElementType.method}) @retention (RetentionPolicy.runtime) public @interface ตรวจสอบความถูกต้อง {public int min () ค่าเริ่มต้น 1; สาธารณะ int สูงสุด () ค่าเริ่มต้น 10; บูลีนสาธารณะ isnotnull () ค่าเริ่มต้นจริง;}เมื่อทำงานในภายหลังให้ใช้การสะท้อนเพื่อรับคำอธิบายประกอบและฉันจะไม่พูดถึงรายละเอียด
ฉันพบบทความทางเทคนิคประเภทนี้เกี่ยวกับเรื่องนี้ก่อนที่จะมองหาบทความทางเทคนิคบนอินเทอร์เน็ตซึ่งทำให้ฉันสับสนอย่างมากในเวลานั้น ฉันไม่คิดว่าฉันต้องการ
ตัวอย่างข้างต้นของคำอธิบายประกอบแบบกำหนดเอง Java เพื่อใช้การตรวจสอบพารามิเตอร์ด้านหน้าและแบ็กเอนด์เป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น