Tetapkan Badan Respons di JAX-RS

1. Gambaran keseluruhan

Untuk mempermudah pengembangan perkhidmatan web REST dan klien mereka di Java, implementasi API JAX-RS yang standard dan mudah alih telah dirancang yang disebut Jersey.

Jersey adalah kerangka sumber terbuka untuk mengembangkan perkhidmatan web REST yang memberikan sokongan untuk API JAX-RS dan berfungsi sebagai pelaksanaan rujukan JAX-RS .

Dalam tutorial ini, kita akan melihat bagaimana kita dapat menubuhkan badan respons Jersey dengan pelbagai jenis media.

2. Pergantungan Maven

Pertama, kita memerlukan kebergantungan berikut yang termasuk dalam fail pom.xml :

 org.glassfish.jersey.bundles jaxrs-ri 2.26   org.glassfish.jersey.core jersey-server 2.26 

Versi terbaru JAX-RS boleh didapati di jaxrs-ri, dan pelayan Jersey boleh didapati di pelayan jersey

3. Respons di Jersey

Secara semula jadi, ada cara yang berbeza untuk membina respons menggunakan Jersey , dan kami akan melihat bagaimana kami dapat membuatnya di bawah.

Semua contoh di sini adalah permintaan HTTP GET, dan kami akan menggunakan perintah curl untuk menguji sumbernya.

3.1. Maklum Balas Teks Ok

Titik akhir yang ditunjukkan di sini adalah contoh mudah bagaimana teks biasa dapat dikembalikan sebagai tindak balas Jersey:

@GET @Path("/ok") public Response getOkResponse() { String message = "This is a text response"; return Response .status(Response.Status.OK) .entity(message) .build(); }

Kita boleh melakukan HTTP GET menggunakan curl untuk mengesahkan tindak balas:

curl -XGET //localhost:8080/jersey/response/ok

Titik akhir ini akan menghantar jawapan seperti berikut:

This is a text response

Apabila jenis media tidak ditentukan, Jersey akan menetapkan teks / dataran secara lalai.

3.2. Ralat Ralat

Kesalahan juga boleh dihantar kembali sebagai tindak balas Jersey:

@GET @Path("/not_ok") public Response getNOkTextResponse() { String message = "There was an internal server error"; return Response .status(Response.Status.INTERNAL_SERVER_ERROR) .entity(message) .build(); }

Untuk mengesahkan respons, kami dapat melakukan permintaan HTTP GET menggunakan curl :

curl -XGET //localhost:8080/jersey/response/not_ok

Mesej ralat akan dihantar kembali sebagai tindak balas:

There was an internal server error

3.3. Respons Teks Biasa

Kami juga dapat mengembalikan respons teks biasa :

@GET @Path("/text_plain") public Response getTextResponseTypeDefined() { String message = "This is a plain text response"; return Response .status(Response.Status.OK) .entity(message) .type(MediaType.TEXT_PLAIN) .build(); }

Sekali lagi, kita dapat melakukan HTTP GET menggunakan curl untuk mengesahkan tindak balas:

curl -XGET //localhost:8080/jersey/response/text_plain

Tanggapannya adalah seperti berikut:

This is a plain text response

Hasil yang sama juga dapat dicapai melalui Menghasilkan anotasi dan bukannya menggunakan kaedah type () dalam Respons :

@GET @Path("/text_plain_annotation") @Produces({ MediaType.TEXT_PLAIN }) public Response getTextResponseTypeAnnotated() { String message = "This is a plain text response via annotation"; return Response .status(Response.Status.OK) .entity(message) .build(); }

Kami boleh melakukan verifikasi tindak balas menggunakan keriting :

curl -XGET //localhost:8080/jersey/response/text_plain_annotation

Inilah tindak balasnya:

This is a plain text response via annotation

3.4. Respons JSON Menggunakan POJO

A mudah POJO (Pojo) juga boleh menjadi membina digunakan balas Jersey .

Kami mempunyai Person POJO yang sangat sederhana ditunjukkan di bawah, yang akan kami gunakan untuk membina respons:

public class Person { String name; String address; // standard constructor // standard getters and setters }

The Orang Pojo kini boleh digunakan untuk kembali JSON sebagai badan Respon :

@GET @Path("/pojo") public Response getPojoResponse() { Person person = new Person("Abhinayak", "Nepal"); return Response .status(Response.Status.OK) .entity(person) .build(); }

Cara kerja titik akhir GET ini dapat disahkan - melalui arahan ikal berikut :

curl -XGET //localhost:8080/jersey/response/pojo

Person POJO akan berubah menjadi JSON dan dihantar kembali sebagai tindak balas:

{"address":"Nepal","name":"Abhinayak"}

3.5. Respons JSON Menggunakan Rentetan Ringkas

Kita boleh menggunakan rentetan yang telah diformat untuk membuat respons , dan ia dapat dilakukan dengan sederhana.

Titik akhir berikut adalah contoh bagaimana JSON yang diwakili sebagai String dapat dihantar kembali sebagai JSON dalam tindak balas Jersey:

@GET @Path("/json") public Response getJsonResponse() { String message = "{\"hello\": \"This is a JSON response\"}"; return Response .status(Response.Status.OK) .entity(message) .type(MediaType.APPLICATION_JSON) .build(); }

This can be verified by doing an HTTP GET using curl to verify the response:

curl -XGET //localhost:8080/jersey/response/json

Calling this resource will return a JSON:

{"hello":"This is a JSON response"}

The same pattern applies for other common media types like XML or HTML. We just need to notify Jersey that it's an XML or HTML using MediaType.TEXT_XML or MediaType.TEXT_HTML and Jersey will handle the rest.

4. Conclusion

In this quick article, we constructed Jersey (JAX-RS) responses for a variety of media types.

All of the code snippets, mentioned in the article, can be found in over on GitHub.