Handle Special Character ใน Request โดยการใช้ @Pattern ของ Spring Boot กัน
สวัสดีครับทุกคน 👋🏻 ทุกคนเชื่อมั้ยครับว่าบางครั้งการยิงเส้น API สักเส้นก็ทำให้เราตื่นเต้นได้ เช่น การยิง API เส้นฝากเงินแต่เงินกลับลดลง! หรือ การยิงเส้น API ถอนเงินแต่เงินกลับเพิ่มขึ้น! 😱😱
เหตุการณ์เหล่านี้จะหมดไปถ้าเรารู้จักการ Handle Request body ที่รับเข้ามาก่อนจะเข้าไปถึงข้างในการทำงานของเส้น API เราจริงๆ โดยการมาลองใช้ @Pattern ของ Java Spring Boot กันเถอะ
Dependency
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot-version}</version>
</dependency>
- Spring Boot ตั้งแต่ version 2.3 ขึ้นไปต้องเพิ่ม spring-boot-starter-validation เข้าไปด้วยเพราะ spring-boot-starter-validation จะถูกตัดออกไปจากตัว spring-boot-starter-web
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>${spring-boot-version}</version>
</dependency>
Controller
ต้องมีการเพิ่ม “@Valid” เข้าไปข้างหน้า @RequestBody เพื่อให้ @Pattern สามารถทำงานได้
ต่อไปเรามาดูหน้าตาของ Request กันบ้างดีกว่า😙😙😙
Request
ใช้ Annotation @Pattern คู่กับ Regular expression ในการ Validate Request ที่รับเข้ามาในที่นี้อนุญาตให้รับแค่ตัวเลขที่มีจุดทศนิยมหรือไม่มีจุดทศนิยมก็ได้
Response
Postman
มาลองยิง Postman กันดีกว่าว่าจะได้ผลลัพธ์ตามที่เราต้องการมั้ยนะะะะะ😨😨😨
- Normal Case
ยิงได้ ✔️ 200 OK ผ่านปกติ
- Special Character + Numeric Case
ทันทีที่ใส่ format ที่ไม่ตรงกับ Regular Expression ที่เรากำหนดไว้ใน @Pattern จะทำให้ได้ ❌ 400 Bad Request ทันทีแบบที่เราต้องการเลยยยย🎉🎉🎉