Hướng dẫn Validation trong Spring MVC

Written by IT Phú Trần on 07/06/2017 in KINH NGHIỆM LẬP TRÌNH and LẬP TRÌNH JAVA and LẬP TRÌNH SPRING MVC with 11 comments.

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! 

11 Responses to “Hướng dẫn Validation trong Spring MVC

  1. Very great post. I just stumbled upon your weblog and wished to say that
    I’ve truly loved browsing your weblog posts. In any case I’ll be subscribing on your rss feed and
    I’m hoping you write once more soon!

  2. Thank you a bunch for sharing this with all of us you really recognise what you
    are speaking approximately! Bookmarked. Kindly also discuss with my website =).
    We could have a link trade agreement among us

  3. Hey There. I discovered your weblog the usage of msn. This is a really smartly written article.
    I’ll make sure to bookmark it and come back to read more of your helpful info.

    Thanks for the post. I’ll definitely return.

  4. Thanks for ones marvelous posting! I definitely enjoyed reading it,
    you are a great author.I will be sure to bookmark
    your blog and definitely will come back in the future.
    I want to encourage that you continue your great job, have a nice
    holiday weekend!

  5. Very quickly this website will be famous amid all blogging
    and site-building people, due to it’s nice posts

  6. What i don’t understood is if truth be told how you’re not actually
    a lot more neatly-preferred than you might be right now.
    You’re very intelligent. You already know thus considerably relating to
    this subject, made me in my view consider it from a
    lot of various angles. Its like men and women don’t seem to be involved except it is something to accomplish with Lady gaga!
    Your personal stuffs great. All the time handle it up!

  7. Everyone loves what you guys are up too. Such clever work and coverage!
    Keep up the fantastic works guys I’ve included you
    guys to blogroll.

  8. Hi! This post could not be written any better! Reading through this post reminds me of my old room mate!
    He always kept talking about this. I will forward this article to him.

    Pretty sure he will have a good read. Many thanks
    for sharing!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *