[SPRING] ตรวจสอบข้อมูลก่อน Save ด้วย hibernate validator ครับ

หลังจาก Blog ตอนที่แล้วผมได้ลองทำ CRUD โดยใช้ Spring Boot ในเรื่องการการจัดการข้อมูล Person ไปแล้วนะครับ แต่ Blog ตอนล่าสุดของผมยังทิ้งท้ายอยู่นะครับ ว่ามันควรจะมีเรื่องของการ Validate ข้อมูลครับ คราวนี้ ผมเขียนตัว Validate ให้มันสมบูรณ์ครับ ซึ่ง Package ที่ผมใช้ hibernate validator ซึ่งเข้าตัวนี้มันเข้ามากับตอนที่เราใส่ Dependency Spring JPA แล้วครับ มาทำเลยดีกว่า

สิ่งที่ต้องมี

  • สร้างเว็บของตัวเองที่มี CRUD กันก่อนครับ
  • หรือ ของผมใช้จาก Blog ตอนที่แล้วครับ

มาลุยกันเลยครับ

  • ชั้น Entity ที่เก็บ POJO Class – ตัว Data Class ของเราแหละครับ เตรียม Annotation ที่เกี่ยวกับการ Validate ข้อมูลครับ อย่างตอนนี้ผมใช้ตัว  @NotNull  กับ  @Size  ครับ
  • ชั้น Controller สำหรับ Parameter ต้องการ Validate ข้อมูลนั้น
    • ใช้ Annotation  @Valid  ที่อยู่ใน Pacakge  javax.validation  เติมนำหน้า Parameter ของ Function ครับ
    • เพิ่ม  BindingResult  สำหรับเก็บผลการ Validate ไว้ครับ โดยเก็บไว้ในตัวแปรชื่อ result
    • จากนั้นเติมเงื่อนไขดักการ Validate ข้อมูลครับ โดยใช้  result.hasErrors()  ครับ
    • มาดู Code สมบูรณ์ของ Method savePerson() ครับ
  • ชั้น View อันนี้ตัว Thymeleaf ได้มีตัวช่วยแล้วครับ โดยถ้ามี Error มันถูก Inject เข้ามาในตัวแปร  #fields ครับ
    • แสดง Error โดยดูจาก Property  hasErrors('ชื่อ Property ใน Enrity[POJO Class])  เช่น  ${#fields.hasErrors('Firstname')  ครับ เวลาใช้งานก็ดัก Error ที่ส่งมาจาก Controller ผ่าน  th:if  แล้วค่อยแสดงผลครับ Code ตามนี้ครับ
    • มาดู Code ที่ผมได้แก้ไขในไฟล์  editPerson.html  ครับ ใช้ได้ทั้ง Model New / Edit ครับ

ลองมาทดสอบกันดูครับ

  • เมื่อมี Error ระบบแสดง Message ดังนี้ครับ

สำหรับ Blog หน้า ผมคงลอง Custom Error Message ดูครับ 😀 แต่ถึงแม้ว่าชั้น Entiry และ Controller มีกลไกในการดัก Validate ข้อมูลแล้ว แต่ฝั่ง Front-End ต้องดักด้วยนะครับ