Handle request trong Javalin

Mình đã giới thiệu với các bạn về Javalin, trong bài viết này chúng ta sẽ tìm hiểu rõ hơn về cách chúng ta sẽ handle request trong Javalin framework các bạn nhé!

Mình cũng tạo một Maven project để làm ví dụ:

Handle request trong Javalin

Javalin và SLF4J Simple dependency như sau:

Mình cũng tạo một class với phương thức main() khởi tạo một web server với đối tượng Javalin như sau:

Như mình đã nói, để handle request trong Javalin chúng ta sẽ sử dụng Functional Interface Handler của nó. Class Handler chỉ có một phương thức handle() với tham số là một đối tượng Context, và đối tượng Context này sẽ giữ tất cả các thông tin của request và response cho một request.

Mình implement đối tượng Handler cho GET request “/example” như sau:

Chúng ta sẽ sử dụng các phương thức queryParam() để lấy thông tin về các request parameter từ người dùng, ví dụ:

Kết quả:

Handle request trong Javalin

Một trong các phương thức overload của phương thức queryParam() còn cho phép chúng ta validate data mà chúng ta truyền vào. Tham số của phương thức này gồm key là request parameter và class là kiểu dữ liệu của giá trị của parameter đó. Ví dụ nếu giờ mình sửa lại đoạn code trên như sau:

thì khi request với URL http://localhost:8080/example?id=Khanh, các bạn sẽ thấy lỗi sau:

Handle request trong Javalin

Chúng ta có thể định nghĩa request với path parameter như sau:

Ở đoạn code trên thì mình đã định nghĩa một path parameter name, để lấy giá trị này thì chúng ta sẽ sử dụng phương thức pathParam() của đối tượng Context.

Kết quả:

Handle request trong Javalin

Tương tự như phương thức queryParam(), chúng ta cũng có thể validate dữ liệu request của người dùng sử dụng phương thức overload của pathParam().

Nếu request của các bạn có phần body thì các bạn có thể sử dụng phương thức body() hoặc bodyAsClass() để lấy được dữ liệu trong phần body này. Ví dụ như sau:

Kết quả:

Handle request trong Javalin

Với phần body thì chúng ta có thể validate data sử dụng phương thức bodyValidator() các bạn nhé!

Sau khi validate với các phương thức queryParam(), pathParam() hay bodyValidator() xong, các bạn cũng có thể add thêm điều kiện để check data của người dùng gửi tới sử dụng phương thức check() của đối tượng TypedValidator như sau:

Kết quả:

Handle request trong Javalin

Thông thường, khi hiện thực các ứng dụng RESTful Web Service, chúng ta thường hiện thực các API CRUD (Create, Read, Update, Delete) và những API này thường bắt đầu với cùng context path, ví dụ “/user” chẳng hạn.

Để đơn giản và tăng khả năng readable, Javalin hỗ trợ groups handler giúp chúng ta có thể gom nhóm để handle request như sau:

Để sử dụng được đoạn code như trên, các bạn sẽ cần phải implement interface Handler cho các phương thức post(), get(), delete(), patch() ở một class khác và thêm nữa là các bạn cần import static các phương thức này từ class io.javalin.apibuilder.ApiBuilder các bạn nhé!

Một điểm của Javalin trong phần handle request nữa mà các bạn cần biết là chúng ta có thể sử dụng các phương thức before() và after() của đối tượng Javalin để thêm phần xử lý trước khi handle request và trước khi return response cho một request bất kỳ hoặc tất cả các request.

Ví dụ, mình muốn trước khi handle một request bất kỳ cho ví dụ trên thì ứng dụng sẽ in ra dòng chữ “Start processing…” thì mình sẽ sửa code lại như sau:

Kết quả:

Handle request và response trong Javalin

Đánh giá bài viết
Chia sẽ bài viết này ...Share on Facebook
Facebook
0Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin

Add Comment