Validate API Input ของ Spring Boot Application

Thirajade Lekkunlawat
Grean Developers Family
3 min readMar 22, 2019

การทำ API เนี่ย สิ่งที่หนีไม่พ้นจะต้องทำอยู่เสมอก็คือการ validate input ของ request ที่เข้ามาหา API เรานั่นเอง

ใน Episode นี้ขอไม่พูดพรำ่ทำเพลงเยอะ เข้าเรื่องวิธีการ validate input เลยแล้วกัน โดยอ้างอิง Source code จากบทความก่อนหน้า ถ้าใครยังไม่ได้อ่านก็ตามไปอ่านกันได้นาาา

สิ่งที่เราจะทำ

  1. เมื่อสร้าง Cosmetic แล้ว amout ที่ใส่เข้ามาจะต้องไม่ติดลบ หรือเป็นศูนย์
  2. name ไม่สามารถเป็น String ว่างๆ หรือ null ได้

สิ่งที่ต้องเตรียม

  1. Project Cosmetics เดิมของเรานั่นเอง
  2. เวลาอีกสัก 15 นาทีนั่นแหล่ะ ไม่นานนนนนน

เริ่ม !

ก่อนอื่นขอพูดถึงการ Validate ก่อนว่าจะมีขั้นตอนอะไร ต้องใส่อะไรตรงไหนบ้าง แน่นอนว่าสิ่งที่เราจะใช้ก็ไม่พ้น… ใช่ครับ Annotation

โอเคเรามาดูกันว่ามี Annotation อะไรให้ใช้บ้างได้จากนี่เลย สามารถเข้าไปอ่านได้ว่ามีตัวไหนทำอะไรได้บ้าง

ทีนี้มาถึงขั้นตอนแรกของเราคือ

1. เลือกตัวที่เหมาะสำหรับเราและใส่ annotation เข้าไป

  • @Positive ใช้กับ amount ที่ห้ามมีค่าติดลบ
  • @NotBlank สำหรับ Name ที่ห้ามเป็นค่า String ว่างๆ หรือ null

พอเราเลือกได้แล้วเราก็เอาไปใส่โลดดดดด ก็จะได้ Entity เราหน้าตาแบบนี้

หลังจากใส่ @NotBlank และ @Positive

2. ใส่ @Valid ที่ RestController

ก็ตรงตัวแบบนั้นเลยครับ ใส่ @Valid เข้าไปโลดเพื่อบอกว่าเราจะ Validate ตัวแปรตัวไหน ตามนี้

หลังจากใส่ @Valid

เสร็จเรียบร้อยก็เริ่มเทสได้ว่าใช้งานได้จริงหรือเปล่า

3. ทดสอบว่า amount ห้ามเป็นค่าลบ หรือ ศูนย์จริงไหม

เราจะลองสร้างเครื่องสำอางขึ้นมาอันนึงดู โดยใส่ amount เป็น -1

Request ไปแบบนี้เลย

ผลลัพธ์ที่ได้คือ Error ด้านล่างนั่นเอง รอดไปหนึ่ง

ผลลัพธ์จากการใส่ amount เป็น -1

4. ทดสอบว่า name ห้ามเป็น String ว่างๆ หรือ null จริงไหม

อ่ะ ลองแบบไม่ใส่ name ไปเลยละกัน

ไม่ใส่ name ใน request body

ผลลัพธ์ที่ได้คือ Error ด้านล่าง

ทีนี้ใส่ name เป็น String ว่างๆซักหน่อย แบบจำชื่อเครื่องสำอางไม่ได้อ่าาา จะมาใส่ทีหลัง

ใส่ String ว่างๆเข้าไป

ผลลัพธ์ก็ Error อย่างที่เห็น อดเลย

สรุป

สำหรับการทำ Validation ก็จะมีขั้นตอนง่ายๆเพียงแค่นี้ แต่บางคนอาจจะสงสัยพอเข้าไปดูแล้ว ปรากฎว่า annotation ที่มีให้ใช้เนี่ย มันน้อยนิ้ดเหลือเกินแล้วถ้าไม่มีที่เราอยากจะใช้จะทำยังไงล่ะ

วิธีการก็คือ การทำ Custom Validation Annotation ขึ้นมานั่นเองงงงง ซึ่งจะพูดใน Episode ถัดไปถ้ามีโอกาสนะคร้าบบบ

อีกเรื่องคืออาจจะสงสัยว่า Error มันต้องยาวๆแบบนี้เท่านั้นหรอ จริงๆก็มีวิธี Customize ตัว Response เวลามัน Error อีกนั่นแหล่ะ แต่ก็เป็นโอกาสหน้าอีกแหล่ะ อิอิ

วันนี้ลาไปเท่านี้ก่อนละกันครับ บัยยย

--

--