SpringMVC รองรับการตรวจสอบข้อมูลเป็นมาตรฐาน JSR303 และได้รับการตรวจสอบโดยพิมพ์ @NotNull, @Max ฯลฯ ตามคุณสมบัติของถั่ว JSR303 มีอินเทอร์เฟซคำอธิบายประกอบจำนวนมากและ SpringMVC ใช้ไฮเบอร์เนตสำหรับการตรวจสอบเหล่านี้ดังนั้นเราจึงต้องเพิ่มแพ็คเกจ Validator สำหรับ Hibernate:
พึ่งพาการอ้างอิง
รวบรวม 'Javax.validation: การตรวจสอบ-API: 2.0.0.final' Compile 'org.hibernate: Hibernate-Validator: 6.0.0.final'
เฟรมเวิร์กได้ให้การตรวจสอบดังนี้:
ตรวจสอบคำอธิบายประกอบที่จัดทำโดย JSR:
@null องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นโมฆะ
@notnull องค์ประกอบที่มีคำอธิบายประกอบจะต้องไม่เป็นโมฆะไม่สามารถเป็นโมฆะได้สามารถเป็น ""
@asserttrue องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นจริง
@ASSERTFALSE องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นเท็จ
@min (ค่า) องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นตัวเลขและค่าของมันจะต้องมากกว่าหรือเท่ากับค่าต่ำสุดที่ระบุ
@max (ค่า) องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นตัวเลขและค่าของมันจะต้องน้อยกว่าหรือเท่ากับค่าสูงสุดที่ระบุ
@decimalmin (ค่า) องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นตัวเลขและค่าของมันจะต้องมากกว่าหรือเท่ากับค่าต่ำสุดที่ระบุ
@DecimalMax (ค่า) องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นตัวเลขและค่าของมันจะต้องน้อยกว่าหรือเท่ากับค่าสูงสุดที่ระบุ
@Size (max =, min =) ตรวจสอบว่าความยาวของวัตถุ (อาร์เรย์, คอลเลกชัน, แผนที่, สตริง) อยู่ในช่วงที่กำหนด
@Digits (จำนวนเต็ม, เศษส่วน) องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นตัวเลขและค่าของมันจะต้องอยู่ในช่วงที่ยอมรับได้
@past องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นวันที่ผ่านมา
@Future องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นวันที่ในอนาคต
@pattern (regex =, flag =) องค์ประกอบที่มีคำอธิบายประกอบต้องสอดคล้องกับนิพจน์ทั่วไปที่ระบุ
ตรวจสอบคำอธิบายประกอบที่จัดทำโดย Hibernate Validator:
@NotBlank (message =) สามารถใช้กับสตริงเท่านั้นไม่ใช่ NULL และหลังจากการโทร Trim () ความยาวจะต้องมากกว่า 0
@Email องค์ประกอบที่มีคำอธิบายประกอบจะต้องเป็นที่อยู่อีเมล
@Length (min =, max =) ขนาดของสตริงหมายเหตุประกอบต้องอยู่ในช่วงที่ระบุ
@NotEmpty สตริงความคิดเห็นต้องไม่ว่างเปล่าไม่สามารถเป็นโมฆะได้ "" สามารถเป็น ""
@Range (min =, max =, message =) องค์ประกอบที่มีคำอธิบายประกอบต้องอยู่ในช่วงที่เหมาะสม
ตัวอย่างการสาธิต
สร้างคลาสเอนทิตีที่ต้องตรวจสอบ:
แพ็คเกจ com.yiba.wifi.news.bean.model; นำเข้า org.hibernate.validator.constraints.length; นำเข้า javax.validation.constraints*; ผู้ใช้คลาสสาธารณะ {@notblank (ข้อความ = "ชื่อผู้ใช้ไม่สามารถเป็นค่าได้ // ชื่อผู้ใช้ @min (value = 1, message = "อายุขั้นต่ำคือ 1 ปี") @max (value = 120, message = "อายุสูงสุดคือ 120") อายุจำนวนเต็ม; // age @Email (message = "ข้อผิดพลาดรูปแบบ eMEALBOX") @NotBlank (message = "ข้อผิดพลาดรูปแบบ eMailBox") สตริงอีเมล; // email @Length (min = 6, max = 12, message = "ความยาวรหัสผ่านต้องอยู่ระหว่าง 6 และ 12 หลัก") สตริง pwd; // รหัสผ่าน // get, set ......... }โปรดทราบว่าเมื่อตรวจสอบอีเมลเมื่ออีเมลคือ "" หรือเป็นโมฆะมันจะผ่านการตรวจสอบ @Email ดังนั้นการตรวจสอบอีเมลจึงต้องใช้ @Email และ @NotBlank เพื่อทำงานร่วมกัน
การออกแบบอินเทอร์เฟซคอนโทรลเลอร์เพิ่มคำหลัก @Validated ที่ยอมรับพารามิเตอร์
/ *** อินเตอร์เฟสเข้าสู่ระบบ* @return*/ @postmapping ("เข้าสู่ระบบ") การเข้าสู่ระบบสตริงสาธารณะ (@Validated @RequestBody ผู้ใช้ผู้ใช้) {return "ตกลง"; -การทดสอบการเข้าถึง:
เมื่อเข้าถึงข้อมูลอยู่ในรูปแบบต่อไปนี้
{"ชื่อ": "", "อายุ": 0, "อีเมล": "", "pwd": ""}คำตอบคือ:
{"timestamp": 1524640724522, "สถานะ": 400, "ข้อผิดพลาด": "คำขอที่ไม่ดี", "ข้อยกเว้น": "org.springframework.web.bind.methodargumentnotnotvalidexception" "notblank.java.lang.string", "notblank"], "อาร์กิวเมนต์": [{"รหัส": ["user.email", "อีเมล"], "อาร์กิวเมนต์": null, "defaultMessage": "อีเมล", "รหัส": "อีเมล"}, "DENTEDVALUE": "", "BindingFailure": FALSE, "CODE": "NOTBLANK"}, {"รหัส": ["NOTBLANK.USER.NAME", "NOTBLANK.NAME", "notBlank.java.lang.string" null, "defaultMessage": "name", "code": "name"}], "defaultMessage": "ชื่อผู้ใช้ไม่สามารถเป็นโมฆะความยาวจะต้องมากกว่า 0", "ObjectName": "ผู้ใช้", "ฟิลด์": "ชื่อ", "length.user.pwd", "length.pwd", "length.java.lang.string", "length"], "อาร์กิวเมนต์": [{"codes": ["user.pwd", "pwd"], "อาร์กิวเมนต์": null " 6 และ 12 บิต "," ObjectName ":" ผู้ใช้ "," ฟิลด์ ":" pwd "," ปฏิเสธการเรียกค่า ":" "," bindingfailure ": false," รหัส ":" ความยาว "}, {" รหัส ":" min.user.age "," min.age "," min.java.lang "user.age", "อายุ"], "อาร์กิวเมนต์": null, "defaultMessage": "อายุ", "รหัส": "อายุ"}, 1], "defaultMessage": "อายุขั้นต่ำคือ 1 ปี", "bindfail" ล้มเหลวสำหรับ object = 'ผู้ใช้'คุณจะเห็นว่าคำขอในพื้นที่ล้มเหลวในการตรวจสอบฟิลด์ 4 มีวิธีที่ฉันจะได้รับข้อมูลข้อยกเว้นหรือไม่? คำตอบคือใช่และเราจำเป็นต้องแก้ไขอินเทอร์เฟซคอนโทรลเลอร์
/** * อินเทอร์เฟซเข้าสู่ระบบ * * @return */@postmapping ("เข้าสู่ระบบ") การเข้าสู่ระบบสตริงสาธารณะ (@validated @requestbody ผู้ใช้ผู้ใช้ผู้ใช้ bindingResult bindingResult) {ถ้า (bindingResult.haserrors ()) {// มีการตรวจสอบ สำหรับ (ข้อผิดพลาด OBJECTERROR: ERRORLIST) {System.out.println (error.getDefaultMessage ()); // ข้อความแสดงข้อผิดพลาดเฉพาะเอาต์พุต} ส่งคืน "ข้อยกเว้นพารามิเตอร์"; } return "ตกลง"; -ขออีกครั้งรูปแบบคำขอมีดังนี้
{"ชื่อ": "", "อายุ": 0, "อีเมล": "", "pwd": ""}การตอบสนองมีดังนี้
ข้อยกเว้นพารามิเตอร์
ข้อมูลที่พิมพ์บนคอนโซลมีดังนี้:
ชื่อผู้ใช้ไม่สามารถเป็นโมฆะความยาวจะต้องมากกว่า 0
ความยาวรหัสผ่านต้องอยู่ระหว่าง 6 ถึง 12 หลักอายุขั้นต่ำคือข้อผิดพลาดรูปแบบอีเมลอายุ 1 ปี
คุณจะเห็นว่าเราได้รับข้อมูลการตรวจสอบตามปกติ
มาอ้างอิงการเข้าถึงที่ถูกต้อง:
พารามิเตอร์คำขอมีดังนี้:
{"ชื่อ": "zhaoyanjun", "อายุ": 1, "อีเมล": "[email protected]", "pwd": "123456"}การตอบสนองมีดังนี้:
ตกลง
คอนโซลส่งออกไม่มีอะไร
สรุป
ข้างต้นเป็นตัวอย่างการสาธิตของฟังก์ชันการตรวจสอบพารามิเตอร์การร้องขอสปริงที่แนะนำโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!