Validate request data trong Spring MVC với Bean Validation

Khi xây dựng một ứng dụng bất kỳ, việc handle tất cả các behavior có thể xảy ra khi người dùng sử dụng ứng dụng của chúng ta là điều cần thiết. Một trong những trường hợp các bạn sẽ thường phải đối mặt khi làm việc với các ứng dụng Spring MVC đó là request data mà người dùng truyền tới sẽ không đúng expectation để ứng dụng của chúng ta có thể handle. Để tránh những trường hợp này, các bạn có thể sử dụng Bean Validation với Spring MVC để chặn những request data như thế. Cụ thể như thế nào? Chúng ta hãy cùng nhau tìm hiểu trong bài viết này các bạn nhé!

Đầu tiên, mình sẽ tạo mới một Spring Boot project với Web Starter dependency để làm ví dụ:

Validate request data trong Spring MVC với Bean Validation

Bây giờ mình sẽ tạo mới một controller với một request đơn giản như sau:

Việc validate kiểu dữ liệu của request parameter “id” trong ví dụ trên thì mặc định Spring MVC đã handle rồi:

Validate request data trong Spring MVC với Bean Validation

Trong request trên, mình truyền giá trị cho request parameter id là “Khanh” nhưng kiểu dữ liệu của parameter này phải là Integer nên Spring MVC sẽ response lại error message.

Thế nhưng trong trường hợp, chúng ta cần giá trị của request parameter id từ người dùng phải lớn hơn hoặc bằng 10 chẳng hạn, Spring MVC mặc định không giúp chúng ta được việc này. Trong trường hợp đó, chúng ta có thể sử dụng code để làm điều này, ví dụ như:

hoặc sử dụng Bean Validation của Java như sau:

Trong đoạn code trên, mình đã sử dụng annotation @Min của Java Bean Validation để khai báo ràng buộc cho giá trị của request parameter id phải lớn hơn hoặc bằng 10 và một điều bắt buộc nữa là các bạn phải khai báo annotation @Validated của Spring.

Kết quả nếu mình request với giá trị của request parameter id lớn hơn 10 sẽ như sau:

Validate request data trong Spring MVC với Bean Validation

Tương tự như các request với request parameter, nếu ứng dụng của các bạn sử dụng path variable:

thì các bạn cũng có thể sử dụng Java Bean Validation với annotation @Validated của Spring như sau:

Kết quả:

Validate request data trong Spring MVC với Bean Validation

Đối với các request mà request data nằm trong body như POST request chẳng hạn, thì chúng ta cũng có thể apply Bean Validation cho đối tượng hold thông tin của request data.

Ví dụ như mình có một POST request truyền thông tin sinh viên:

với thông tin sinh viên được định nghĩa sử dụng Bean Validation như sau:

Với định nghĩa trên, mình đang muốn thì thông tin sinh viên sẽ phải có name và age phải lớn hơn hoặc bằng 18.

Để enable Bean Validation trong Spring MVC với các request mà data nằm trong phần body, chúng ta sẽ sử dụng annotation @Valid của Bean Validation như sau:

Kết quả nếu mình request invalid data sẽ như sau:

Validate request data trong Spring MVC với Bean Validation

3 thoughts on “Validate request data trong Spring MVC với Bean Validation

Add Comment