Skip to content

Hướng dẫn Validation trong Spring MVC

Trong bài viết này, tôi sẽ hướng dẫn các bạn cách để Validation trong Spring MVC. Một trong những yếu tố phổ biến nhất của ứng dụng web là xác nhận dữ liệu từ người dùng. Bất cứ khi nào người dùng gửi dữ liệu vào hệ thống của bạn, thì dữ liệu đó phải cần được xác nhận.

Lý do vì sao chúng ta cần Validation cho form?

Đơn giản, mục đích chính ở đây là là để ngăn chặn các cuộc tấn công, dữ liệu xấu, và lỗi của người dùng. Một số trường hợp chúng ta cũng có thể dùng jquery validation để valid cho form, tuy nhiên người dùng có thể tắt javascript và lúc này đương nhiên là việc validation không còn tác dụng.Các bạn có thể xem bài viết validation với jquery tại đây. Cho nên việc chúng ta cần phải validation không chỉ với trình duyệt mà còn phải validation ở phía Server. Ở đây tôi đang nói đến việc chúng ta cần valid với Spring MVC.

Hướng dẫn này sẽ hướng dẫn,giải thích cơ bản về validation với Spring MVC.

Điều kiện tiên quyết:

Bạn cần phải có một sự hiểu biết cơ bản về cách sử dụng, luồng đi của ứng dụng Spring MVC. Nếu bạn chưa hiểu các khái niệm cơ bản của Spring MVC, hãy làm theo một số hướng dẫn về Spring của tôi trước khi thực hiện bài này.

Hãy bắt đầu nào. Để bắt đầu, trước tiên chúng ta cần có một số thư viện cần có để  sử dụng Hibernate Validator :

  1. hibernate-validator-5.4.1.Final.jar
  2. hibernate-validator-annotation-processor-5.4.1.Final.jar
  3. hibernate-validator-cdi-5.4.1.Final.jar

required:

Hướng dẫn Validation trong Spring MVC

Để đãm bảo cho việc uỷ thác các yêu cầu điều khiển trong ứng dụng Sprung của bạn, chúng ta thêm vào thẻ:

annotation-driven. Các bạn có thể tìm hiểu kỹ hơn ở bài viết này. Click.

Tất nhiên chúng ta sẽ có các thư viện cần thiết để có thể chạy một ứng dụng Spring MVC.

Java Configuration:

XML Configuration:


Bay giờ , chúng ta có một  đối tượng (Object) Subscriber  cần valid như sau:

Tiếp theo chúng ta cần thực hiện việc xử lý và kiểm tra tại controller:

FormController.java

Đơn giản chỉ cần thêm @ Valid trước đối tượng cần kiểm tra để cho Spring xác nhận đối tượng “Subscriber“. Lưu ý rằng chúng ta cũng thêm một đối số “BindingResult”. Đây là đối tượng của Spring giữ kết quả của việc xác nhận và ràng buộc và chứa các lỗi có thể đã xảy ra. Các BindingResult phải để ngay sau khi đối tượng được xác nhận tức là đặt ngay @ModelAttribute nếu không Spring sẽ không xác nhận đối tượng và ném một ngoại lệ.

Khi Spring thấy “@Valid”, nó cố gắng tìm kiểm chứng cho đối tượng đang được xác nhận. Spring tự động chọn các chú thích xác nhận nếu bạn đã kích hoạt “annotation-driven”. Spring sau đó gọi trình xác nhận và đặt bất kỳ lỗi nào trong BindingResult.

Tiếp theo, chúng ta sẽ tạo một view như sau:

Tạo file form.jsp

Ở đây chúng ta sử dụng thẻ “form: errors” để xuất hiện thông báo lỗi  đến đường dẫn được chỉ định là path.


Ok! Bay giờ chúng ta cùng chạy ứng dụng Spring MVC:

Hướng dẫn Validation trong Spring MVC

Khi các bạn nhấn nút đăng ký, chúng ta đã valid được khi người dùng nhập không đúng theo yêu cầu. Tuy nhiên thông báo lỗi có vẻ hơi tệ ^^. Vấn đề ở đây tôi muốn thông báo ra để người dùng trải nghiệm tốt hơn thì các bạn có thể làm như sau:

Điều này thật sự tốt khi chúng ta chạy lại ứng dụng, nó hiển thị được tiếng việt.

Hướng dẫn Validation trong Spring MVC

Tuy nhiên với khi valid như thế này thì nó không hỗ trợ quốc tế hóa (not support internationalization). Nghĩa là một số Annoation không hiển thị được tiếng việt như mong muốn. Ví dụ như trường Age, chúng ta muốn hiển thị theo thông báo của chúng ta.Lúc này, các bạn có thể dễ dàng ghi đè lên các tin nhắn mặc định . Để thực hiện việc này, trước tiên hãy thiết lập message bundle:

JavaConfig:

XML Config:

Bây giờ, tạo một file có tên “messages.properties” trong thư mục “WEB-INF/classes“. Chúng ta có thể ghi đè lên các thông báo lỗi mặc định. Thông báo lỗi được giải quyết bằng cách sử dụng mẫu sau:

{ValidationClass}.{modelObjectName}.{field}
Bây giờ chúng ta thực hiện validation cho trường Age, giả sử nếu người dùng không nhập thì thông báo như đã ràng buộc cho thuộc tính Age như sau:
  1. @NotNull thì hiển thị thông báo : Bạn nhập vào trường này!
  2. @Min(13) thì hiển thị thông báo : Bạn nhập vào tuổi ít nhất là 13.
  3. @Max(110) thì hiển thị thông báo : Bạn nhập vào tuổi lớn nhất nhất là 110.

Cách thông báo trong file messages.properties như sau:

Những trường khác, các bạn muốn ghì đè nội dung tin nhắn thì làm tương tự.

Khi chạy ứng dụng chúng ta đã hiển thị thông báo như mong muốn :

Hướng dẫn Validation trong Spring MVC



#Tổng kết

OK. Vậy là chúng ta đã thực hiện validation đươọc dữ liệu khi người dùng nhập vào form trước khi thực thi đăng ký người dùng. Hãy luôn ghi nhớ rằng “đừng bao giờ tin vào dữ liệu người dùng nhập vào“, vì thế luôn validate dữ liệu trước khi lưu vào hệ thống nhé.

Chúc các bạn thực hiện thành công! 

Published inKINH NGHIỆM LẬP TRÌNHLẬP TRÌNH JAVALẬP TRÌNH SPRING MVC

4 Comments

  1. 174938 570248You ought to get involved in a contest personally with the finest blogs on-line. I will recommend this page! 578533

  2. 706281 185410I discovered your weblog site on google and verify several of your early posts. Continue to preserve up the superb operate. I simply extra up your RSS feed to my MSN News Reader. Seeking for forward to reading extra from you in a whilst! 556879

  3. 675777 826509I enjoy your function , regards for all of the informative posts . 99868

Leave a Reply

Your email address will not be published. Required fields are marked *