REST API s Jersey a pružinou

ODPOČINOK Najlepšie

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ

1. Prehľad

Jersey je rámec otvoreného zdroja pre vývoj webových služieb RESTful. Slúži ako referenčná implementácia JAX-RS.

V tomto článku preskúmame vytvorenie RESTful Web Service pomocou Jersey 2. Použijeme tiež Spring's Dependency Injection (DI) s konfiguráciou Java.

2. Maven závislosti

Začnime pridaním závislostí do súboru pom.xml:

 org.glassfish.jersey.containers dres-kontajner-servlet 2,26 org.glassfish.jersey.media dres-media-json-jackson 2,26 

Pre jarnú integráciu musíme pridať dres-pružina4 závislosť:

 org.glassfish.jersey.ext dres-jar4 2.26 

Najnovšia verzia týchto závislostí je k dispozícii na serveroch jersey-container-servlet, Jersey-media-json-jackson a jersey-spring4.

3. Konfigurácia webu

Ďalej musíme nastaviť webový projekt na vykonanie konfigurácie servletu. Na to použijeme Spring WebApplicationInitializer:

@Order (Ordered.HIGHEST_PRECEDENCE) verejná trieda ApplicationInitializer implementuje WebApplicationInitializer {@Override public void onStartup (ServletContext servletContext) hodí ServletException {AnnotationConfigWebApplicationContext context = nový AnnotationConfigWebApplicationWebApplicationInitializer servletContext.addListener (nový ContextLoaderListener (kontext)); servletContext.setInitParameter ("contextConfigLocation", "com.baeldung.server"); }}

Tu pridávame @Order (objednané.HIGHEST_PRECEDENCE) anotáciu, aby sme sa uistili, že náš inicializátor je vykonaný pred predvoleným inicializátorom Jersey-Spring.

4. Služba využívajúca Jersey JAX-RS

4.1. Trieda zastúpenia zdrojov

Použime ukážkovú triedu reprezentácie prostriedkov:

@XmlRootElement verejná trieda Employee {private int id; private String meno; // štandardné getre a setre}

Upozorňujeme, že anotácie JAXB majú radi @XmlRootElement sú potrebné, iba ak je potrebná podpora XML (okrem JSON).

4.2. Implementácia služby

Pozrime sa teraz na to, ako môžeme použiť anotácie JAX-RS na vytvorenie webových služieb RESTful:

@ Cesta ("/ zamestnanci") verejná trieda EmployeeResource {@Autowired private EmployeeRepository employeeRepository; @GET @Path ("/ {id}") @Produces ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) public Employee getEmployee (@PathParam ("id") int id) {return employeeRepository.getEmployee (id); } @POST @Consumes ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) verejná odpoveď addEmployee (zamestnanec zamestnanca, @Context UriInfo uriInfo) {employeeRepository.addEmployee (nový zamestnanec (employee.getId (), employee.getFirstName) getLastName (), employee.getAge ())); návrat Response.status (Response.Status.CREATED.getStatusCode ()) .header ("Location", String.format ("% s /% s", uriInfo.getAbsolutePath (). toString (), employee.getId ()) ) .build (); }}

The @ Cesta anotácia poskytuje relatívnu cestu URI k službe. Môžeme tiež vložiť premenné do syntaxe URI, ako {id} variabilné šou. Potom budú premenné nahradené za behu programu. Na získanie hodnoty premennej môžeme použiť @PathParam anotácia.

@ ZÍSKAŤ, @ PUT, @POST, @DELETE a @HEAD definovať metódu HTTP požiadavky, ktoré budú spracované anotovanými metódami.

The @Produkty anotácia definuje typ odpovede koncového bodu (Typ média MIME). V našom príklade sme ho nakonfigurovali tak, aby vracal buď JSON alebo XML v závislosti od hodnoty hlavičky HTTP súhlasiť (aplikácia / json alebo prihláška / xml).

Na druhej strane, the @Consumes anotácia definuje typy médií MIME, ktoré môže služba spotrebovať. V našom príklade môže služba spotrebovať buď JSON alebo XML v závislosti od hlavičky HTTP Druh obsahu (aplikácia / json alebo prihláška / xml).

The @Kontext anotácia sa používa na vloženie informácií do poľa triedy, vlastnosti fazule alebo parametra metódy. V našom príklade ho používame na injekciu UriInfo. Môžeme ho použiť aj na injekciu ServletConfig, ServletContext, HttpServletRequest a HttpServletResponse.

5. Používanie ExceptionMapper

ExceptionMapper umožňuje zachytiť výnimky a vrátiť klientovi príslušný kód odpovede HTTP. V nasledujúcom príklade sa vráti kód odpovede HTTP 404, ak EmployeeNotFound je vyvolaná výnimka:

@Provider verejná trieda NotFoundExceptionHandler implementuje ExceptionMapper {public Response toResponse (EmployeeNotFound ex) {return Response.status (Response.Status.NOT_FOUND) .build (); }}

6. Správa tried zdrojov

Nakoniec poďme prepojiť všetky triedy implementácie služieb a mapovače výnimiek s cestou aplikácie:

@ApplicationPath ("/ resources") verejná trieda RestConfig rozširuje aplikáciu {public Set getClasses () {vrátiť nový HashSet(Arrays.asList (EmployeeResource.class, NotFoundExceptionHandler.class, AlreadyExistsExceptionHandler.class)); }}

7. Testovanie API

Poďme teraz otestovať API pomocou niekoľkých živých testov:

verejná trieda JerseyApiLiveTest {private static final String SERVICE_URL = "// localhost: 8082 / spring-jersey / resources / zamestnanci"; @ Test public void givenGetAllEmployees_whenCorrectRequest_thenResponseCodeSuccess () hodí ClientProtocolException, IOException {HttpUriRequest request = new HttpGet (SERVICE_URL); HttpResponse httpResponse = HttpClientBuilder .create () .build () .execute (požiadavka); assertEquals (httpResponse .getStatusLine () .getStatusCode (), HttpStatus.SC_OK); }}

8. Záver

V tomto článku sme predstavili rámec Jersey a vyvinuli jednoduché API. Použili sme funkcie Spring for Dependency Injection. Taktiež sme videli použitie ExceptionMapper.

Úplný zdrojový kód je ako vždy k dispozícii v tomto projekte Github.

REST spodok

Práve som oznámil nové Naučte sa jar kurz zameraný na základy jari 5 a Spring Boot 2:

>> SKONTROLUJTE KURZ