Handle Special Character ใน Request โดยการใช้ @Pattern ของ Spring Boot กัน

Rungruk Maitriboriruk
SCB Engineer
Published in
2 min readJul 21, 2021

สวัสดีครับทุกคน 👋🏻 ทุกคนเชื่อมั้ยครับว่าบางครั้งการยิงเส้น 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 สามารถทำงานได้

Controller

ต่อไปเรามาดูหน้าตาของ Request กันบ้างดีกว่า😙😙😙

Request

ใช้ Annotation @Pattern คู่กับ Regular expression ในการ Validate Request ที่รับเข้ามาในที่นี้อนุญาตให้รับแค่ตัวเลขที่มีจุดทศนิยมหรือไม่มีจุดทศนิยมก็ได้

Request

Response

Response

Postman

มาลองยิง Postman กันดีกว่าว่าจะได้ผลลัพธ์ตามที่เราต้องการมั้ยนะะะะะ😨😨😨

  • Normal Case

ยิงได้ ✔️ 200 OK ผ่านปกติ

  • Special Character + Numeric Case

ทันทีที่ใส่ format ที่ไม่ตรงกับ Regular Expression ที่เรากำหนดไว้ใน @Pattern จะทำให้ได้ ❌ 400 Bad Request ทันทีแบบที่เราต้องการเลยยยย🎉🎉🎉

--

--