Klien JAX-RS dengan Jersey

1. Ikhtisar

Jersey adalah kerangka kerja sumber terbuka untuk mengembangkan Layanan Web RESTFul. Ini juga memiliki kemampuan klien bawaan yang hebat.

Dalam tutorial singkat ini, kita akan mengeksplorasi pembuatan klien JAX-RS menggunakan Jersey 2.

Untuk diskusi tentang pembuatan RESTful Web Services menggunakan Jersey, silakan merujuk ke artikel ini.

2. Ketergantungan Maven

Mari kita mulai dengan menambahkan dependensi yang diperlukan (untuk klien Jersey JAX-RS) di pom.xml :

 org.glassfish.jersey.core jersey-client 2.25.1 

Untuk menggunakan Jackson 2.x sebagai penyedia JSON:

 org.glassfish.jersey.media jersey-media-json-jackson 2.25.1 

Versi terbaru dari dependensi ini dapat ditemukan di jersey-client dan jersey-media-json-jackson.

3. Klien RESTFul di Jersey

Kami akan mengembangkan klien JAX-RS untuk menggunakan JSON dan XML REST API yang kami kembangkan di sini (kami perlu memastikan bahwa layanan diterapkan dan URL dapat diakses).

3.1. Kelas Representasi Sumber Daya

Mari kita lihat kelas representasi sumber daya:

@XmlRootElement public class Employee { private int id; private String firstName; // standard getters and setters }

Anotasi JAXB seperti @XmlRootElement diperlukan hanya jika dukungan XML diperlukan.

3.2. Membuat Mesin Virtual Klien

Hal pertama yang kita butuhkan adalah sebuah instance dari Klien :

Client client = ClientBuilder.newClient();

3.3. Membuat Target Web

Setelah kami memiliki instance Klien , kami dapat membuat WebTarget menggunakan URI dari sumber daya web yang ditargetkan:

WebTarget webTarget = client.target("//localhost:8082/spring-jersey");

Dengan menggunakan WebTarget , kita dapat menentukan jalur ke sumber daya tertentu:

WebTarget employeeWebTarget = webTarget.path("resources/employees");

3.4. Membuat Permintaan Permintaan HTTP

Instance pembuat permintaan dibuat dengan salah satu metode WebTarget.request () :

Invocation.Builder invocationBuilder = employeeWebTarget.request(MediaType.APPLICATION_JSON);

Untuk format XML, MediaType.APPLICATION_XML dapat digunakan.

3.5. Memanggil Permintaan HTTP

Memanggil HTTP GET:

Response response = invocationBuilder.get(Employee.class);

Memanggil HTTP POST:

Response response = invocationBuilder .post(Entity.entity(employee, MediaType.APPLICATION_JSON);

3.6. Contoh Klien REST

Mari mulai menulis klien REST sederhana. Metode getJsonEmployee () mengambil objek Karyawan berdasarkan id karyawan . JSON yang dikembalikan oleh REST Web Service dideserialisasi ke objek Karyawan sebelum dikembalikan.

Menggunakan JAX-RS API dengan lancar untuk membuat target web, pembuat permintaan, dan meminta permintaan HTTP GET:

public class RestClient { private static final String REST_URI = "//localhost:8082/spring-jersey/resources/employees"; private Client client = ClientBuilder.newClient(); public Employee getJsonEmployee(int id) { return client .target(REST_URI) .path(String.valueOf(id)) .request(MediaType.APPLICATION_JSON) .get(Employee.class); } //... }

Sekarang mari tambahkan metode untuk permintaan HTTP POST. Metode createJsonEmployee () membuat Karyawan dengan menjalankan Layanan Web REST untuk pembuatan Karyawan . API klien secara internal membuat serial objek Karyawan ke JSON sebelum menjalankan metode HTTP POST:

public Response createJsonEmployee(Employee emp) { return client .target(REST_URI) .request(MediaType.APPLICATION_JSON) .post(Entity.entity(emp, MediaType.APPLICATION_JSON)); }

4. Menguji Klien

Mari kita uji klien kita dengan JUnit:

public class JerseyClientLiveTest { public static final int HTTP_CREATED = 201; private RestClient client = new RestClient(); @Test public void givenCorrectObject_whenCorrectJsonRequest_thenResponseCodeCreated() { Employee emp = new Employee(6, "Johny"); Response response = client.createJsonEmployee(emp); assertEquals(response.getStatus(), HTTP_CREATED); } }

5. Kesimpulan

Pada artikel ini, kami telah memperkenalkan klien JAX-RS menggunakan Jersey 2 dan mengembangkan klien RESTFul Java sederhana.

Seperti biasa, kode sumber lengkap tersedia di proyek Github ini.