Vodič za RESTEasy
1. Uvod
JAX-RS (Java API za RESTful Web Services) skup je Java API-ja koji pruža podršku u stvaranju API-ji REST. A okvir dobro koristi napomene za pojednostavljivanje razvoja i primjene ovih API-ja.
U ovom uputstvu koristit ćemo RESTEasy, JBoss je omogućio prijenosnu implementaciju JAX-RS specifikacije, kako bi se stvorile jednostavne RESTful web usluge.
2. Postavljanje projekta
Idemo dva razmotriti dva moguća scenarija:
- Samostalno postavljanje - namijenjeno radu na svakom aplikacijskom poslužitelju
- Postavljanje JBoss AS - uzeti u obzir samo za postavljanje u JBoss AS
2.1. Samostalno postavljanje
Krenimo od korištenja JBoss WildFly 10 sa samostalnim postavljanjem.
JBoss WildFly 10 dolazi s RESTEasy verzijom 3.0.11, ali kao što ćete vidjeti, konfigurirat ćemo pom.xml s novom verzijom 3.0.14.
I zahvaljujući resteasy-servlet-inicijalizator, RESTEasy pruža integraciju sa samostalnim Servlet 3.0 kontejneri preko ServletContainerInitializer integracijsko sučelje.
Pogledajmo pom.xml: jboss-deployment-structure.xml Unutar JBoss-a sve što je raspoređeno kao WAR, JAR ili EAR je modul. Ti se moduli nazivaju dinamički moduli. Pored njih, postoje i neke statičke modula u $ JBOSS_HOME / moduli. Kao što JBoss ima RESTEasy statički moduli - za samostalno raspoređivanje, jboss-deployment-structure.xml je obavezan kako bi se neki od njih izuzeli. Na taj način svi razredi i JAR datoteke sadržane u našem RAT će se učitati: Ako ćete pokretati RESTEasy s verzijom JBoss 6 ili novijom, možete odabrati usvajanje biblioteka koje su već upakovane u aplikacijski poslužitelj, pojednostavljujući pom: Primijeti da jboss-deployment-structure.xml više nije potreban. Krenimo sada na brzinu pogledati web.xml našeg jednostavnog projekta ovdje: resteasy.servlet.mapping.prefix potreban je samo ako želite dodati relativni put do API aplikacije. U ovom je trenutku vrlo važno primijetiti da nismo prijavili nijednu Servlet uweb.xml jer odmoran inicijator servleta je dodan kao ovisnost u pom.xml. Razlog tome je - RESTEasy pruža org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer razred koji provodi javax.server.ServletContainerInitializer. ServletContainerInitializer je inicijalizator i izvršava se prije nego što bilo koji kontekst servleta bude spreman - ovaj inicijalizator možete koristiti za definiranje servleta, filtara ili slušatelja za vašu aplikaciju. The javax.ws.rs.core.Prijava klasa je standardna JAX-RS klasa koju možete implementirati kako biste pružili informacije o svojoj implementaciji: Kao što vidite - ovo je jednostavno klasa na kojoj su navedeni svi korijenski resursi i dobavljači JAX-RS, a označena je s @ApplicationPath bilješka. Ako vratite bilo koji prazan skup za po razredima i pojedinačnim tonovima, WAR će se skenirati za JAX-RS napomene i klase dobavljača. Konačno, pogledajmo ovdje stvarnu definiciju API-ja: U ovom smo brzom vodiču predstavili RESTEasy i sa njim smo izgradili super jednostavan API. Primjer korišten u ovom članku dostupan je kao ogledni projekt u GitHubu. 3.0.14.Končni org.jboss.resteasy resteasy-servlet-inicijalizator $ {resteasy.version} org.jboss.resteasy resteasy-client $ {resteasy.version}
2.2. JBoss kao postavljanje
org.jboss.resteasy resteasy-jaxrs $ {resteasy.version}
3. Šifra na poslužitelju
3.1. Servlet verzija 3 web.xml
Primjer RestEasy resteasy.servlet.mapping.prefix / rest
3.2. Razred primjene
@ApplicationPath ("/ rest") javna klasa RestEasyServices proširuje Application {private Set singletons = new HashSet (); javni RestEasyServices () {singletons.add (novi MovieCrudService ()); } @Override public Set getSingletons () {return singletons; }}
3.3. Klasa implementacije usluga
@Path ("/ movies") javna klasa MovieCrudService {privatni inventar karte = novi HashMap (); @GET @Path ("/ getinfo") @Produces ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) javni film movieByImdbId (@QueryParam ("imdbId") String imdbId) {if (inventory.containsKey (imdbId return inventory) .get (imdbId); } else {vratiti nulu; }} @POST @Path ("/ addmovie") @Consumes ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) javni odgovor addMovie (Filmski film) {if (null! = Inventory.get (movie.getImdbId ())) { vrati Response .status (Response.Status.NOT_MODIFIED) .entity ("Film je već u bazi podataka."). build (); } inventory.put (movie.getImdbId (), movie); vratiti Response.status (Response.Status.CREATED) .build (); }}
4. Zaključci