Panduan untuk MENGURANGKAN

1. Pengenalan

JAX-RS (Java API for RESTful Web Services) adalah sekumpulan API Java yang memberikan dukungan dalam membuat REST API . Dan kerangka tersebut menggunakan anotasi dengan baik untuk mempermudah pengembangan dan penggunaan API ini.

Dalam tutorial ini, kami akan menggunakan RESTEasy, JBoss menyediakan pelaksanaan mudah alih spesifikasi JAX-RS, untuk membuat perkhidmatan Web RESTful yang mudah.

2. Penyediaan Projek

Kami akan mempertimbangkan dua kemungkinan senario:

  • Persediaan Berdiri - bertujuan untuk bekerja pada setiap pelayan aplikasi
  • Penyediaan JBoss AS - untuk dipertimbangkan hanya untuk penyebaran di JBoss AS

2.1. Persediaan Berdiri

Mari kita mulakan dengan menggunakan JBoss WildFly 10 dengan persediaan mandiri.

JBoss WildFly 10 hadir dengan RESTEasy versi 3.0.11, tetapi seperti yang anda lihat, kami akan mengkonfigurasi pom.xml dengan versi 3.0.14 yang baru.

Dan terima kasih kepada resteasy-servlet-initializer , RESTEasy menyediakan integrasi dengan wadah Servlet 3.0 mandiri melalui antara muka integrasi ServletContainerInitializer .

Mari lihat pom.xml :

 3.0.14.Final org.jboss.resteasy resteasy-servlet-initializer ${resteasy.version} org.jboss.resteasy resteasy-client ${resteasy.version} 

jboss-deployment-structure.xml

Di dalam JBoss, semua yang digunakan sebagai WAR, JAR atau EAR adalah modul. Modul ini disebut sebagai modul dinamik .

Di samping itu, terdapat juga beberapa modul statik dalam $ JBOSS_HOME / modul . Oleh kerana JBoss mempunyai modul statik RESTEasy - untuk penggunaan mandiri, jboss-deployment-structure.xml adalah wajib untuk mengecualikan sebahagian daripadanya.

Dengan cara ini, semua kelas dan fail JAR yang terdapat di dalam WAR kami akan dimuat:

2.2. JBoss sebagai Persediaan

Sekiranya anda akan menjalankan RESTEasy dengan JBoss versi 6 atau lebih tinggi, anda boleh memilih untuk menggunakan perpustakaan yang sudah digabungkan dalam pelayan aplikasi, sehingga memudahkan pom:

 org.jboss.resteasy resteasy-jaxrs ${resteasy.version} 

Perhatikan bahawa jboss-deployment-structure.xml tidak lagi diperlukan.

3. Kod Sampingan Pelayan

3.1. Servlet Versi 3 web.xml

Mari lihat sekilas web.xml projek mudah kami di sini:

 RestEasy Example resteasy.servlet.mapping.prefix /rest 

resteasy.servlet.mapping.prefix hanya diperlukan jika anda ingin menambah jalan relatif ke aplikasi API.

Pada ketika ini, ia adalah sangat penting untuk perhatian bahawa kami tidak mengisytiharkan sebarang Servlet dalam web.xml kerana resteasy servlet-pengasal telah ditambah sebagai pergantungan dalam pom.xml . Sebabnya ialah - RESTEasy menyediakan kelas org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer yang melaksanakan javax.server.ServletContainerInitializer .

ServletContainerInitializer adalah penginisialisasi dan dijalankan sebelum konteks servlet siap - anda boleh menggunakan inisialisasi ini untuk menentukan servlet, penapis atau pendengar untuk aplikasi anda.

3.2. Kelas Permohonan

The javax.ws.rs.core.Application kelas adalah standard JAX-RS kelas yang anda boleh melaksanakan untuk menyediakan maklumat mengenai penggunaan anda:

@ApplicationPath("/rest") public class RestEasyServices extends Application { private Set singletons = new HashSet(); public RestEasyServices() { singletons.add(new MovieCrudService()); } @Override public Set getSingletons() { return singletons; } }

Seperti yang anda lihat - ini hanyalah kelas yang menyenaraikan semua sumber dan penyedia root JAX-RS, dan diberi penjelasan dengan anotasi @ApplicationPath .

Sekiranya anda mengembalikan sekumpulan kosong mengikut kelas dan singlet, WAR akan diimbas untuk kelas sumber dan penyedia anotasi JAX-RS.

3.3. Kelas Pelaksanaan Perkhidmatan

Akhirnya, mari lihat definisi API sebenar di sini:

@Path("/movies") public class MovieCrudService { private Map inventory = new HashMap(); @GET @Path("/getinfo") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Movie movieByImdbId(@QueryParam("imdbId") String imdbId) { if (inventory.containsKey(imdbId)) { return inventory.get(imdbId); } else { return null; } } @POST @Path("/addmovie") @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Response addMovie(Movie movie) { if (null != inventory.get(movie.getImdbId())) { return Response .status(Response.Status.NOT_MODIFIED) .entity("Movie is Already in the database.").build(); } inventory.put(movie.getImdbId(), movie); return Response.status(Response.Status.CREATED).build(); } }

4. Kesimpulan

In this quick tutorial we introduced RESTEasy and we built a super simple API with it.

The example used in this article is available as a sample project in GitHub.