Định nghĩa request URL trong ứng dụng Jakarta EE RESTful Web Services

764

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh

Trong ứng dụng Jakarta EE RESTful Web Services, để định nghĩa request URL, chúng ta sẽ sử dụng annotation @Path. Annotation này chỉ có duy nhất một attribute là value() với giá trị là request URL mà chúng ta muốn định nghĩa.

Các bạn có thể định nghĩa annotation @Path ở class level hoặc method level.

Định nghĩa ở class level là bắt buộc các bạn nhé!

  Tạo ứng dụng Jakarta EE MVC sử dụng Maven trong Eclipse
  API là gì? Các nguyên tắc xây dựng Rest API

Xem thêm nhiều việc làm Agile lương cao trên TopDev

Ở class level thì giá trị được định nghĩa cho annotation này sẽ là prefix cho tất cả các request được định nghĩa bên trong class.

Ví dụ như mình có ứng dụng định nghĩa request URL như sau:

package com.huongdanjava.jaxrs;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;

@Path("/app")
public class HelloResource {

@GET
@Path("hello")
public String hello() {
return "Hello World!";
}

@GET
@Path("login")
public String login() {
return "Login";
}
}

thì các bạn có thể request tới ứng dụng này với các request URL như sau:

/app/hello
/app/login

Nếu các bạn không muốn định nghĩa prefix cho các request URL bên trong class thì có thể định nghĩa annotation @Path với giá trị @Path(“/”) hoặc @Path(“”) các bạn nhé!

Định nghĩa annotation @Path ở method level giúp chúng ta chỉ định rõ request URL nào được handle bởi method nào.

Để định nghĩa path parameter cho các request URL, chúng ta sẽ định nghĩa cặp “{“, “}” với tên parameter ở giữa cặp này trong annotation @Path.

Giá trị của parameter sẽ được bind vào request URL sử dụng annotation @PathParam, ví dụ như sau:

package com.huongdanjava.jaxrs;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;

@Path("/")
public class HelloResource {

@GET
@Path("/hello/{name}")
public String hello(@PathParam("name") String name) {
return "Hello, " + name;
}
}

Trong ví dụ trên, mình đã định nghĩa một path parameter tên là name.

Kết quả:
Để định nghĩa request parameter cho các request URL, chúng ta sẽ sử dụng annotation @QueryParam.

Ví dụ như sau:

package com.huongdanjava.jaxrs;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.QueryParam;

@Path("/")
public class HelloResource {

@GET
@Path("/hello")
public String hello(@QueryParam("name") String name) {
return "Hello, " + name;
}
}

Với ví dụ này thì mình đã định nghĩa một query parameter tên là name.

Kết quả:

Jakarta EE RESTful Web Service còn hỗ trợ chúng ta định nghĩa request URL với matrix param, sử dụng annotation @MatrixParam.

Matrix param giúp chúng ta có thể định nghĩa value của parameter phức tạp hơn, như là một collection chẳng hạn.

Các matrix parameter này ngăn cách nhau bởi dấu chấm phẩy.

Ví dụ, mình định nghĩa request URL như sau:

package com.huongdanjava.jaxrs;

import jakarta.ws.rs.GET;
import jakarta.ws.rs.MatrixParam;
import jakarta.ws.rs.Path;
import java.util.List;

@Path("/")
public class HelloResource {

@GET
@Path("/hello")
public String hello(@MatrixParam("name") List<String> names,
@MatrixParam("address") List<String> address) {
return "Hello, " + names.toString() + ", " + address.toString();
}
}

Nếu bây giờ, mình request tới URL http://localhost:8080/hello;name=khanh,Java;address=A,B, các bạn sẽ thấy kết quả như sau: