REST API s Jerseyem i Springom

OSTALO Vrh

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ

1. Pregled

Jersey je okvir otvorenog koda za razvoj RESTful web usluga. Služi kao referentna implementacija JAX-RS.

U ovom članku, istražit ćemo stvaranje RESTful web usluge koristeći Jersey 2. Također, koristit ćemo Spring's Dependency Injection (DI) s Java konfiguracijom.

2. Ovisnosti Mavena

Počnimo dodavanjem ovisnosti na pom.xml:

 org.glassfish.jersey.containers jersey-container-servlet 2.26 org.glassfish.jersey.media jersey-media-json-jackson 2.26 

Također, za Spring integraciju moramo dodati dres-proljeće4 ovisnost:

 org.glassfish.jersey.ext dres-proljeće4 2.26 

Najnovija verzija ovih ovisnosti dostupna je na jersey-container-servlet, jersey-media-json-jackson i jersey-spring4.

3. Web konfiguracija

Dalje, moramo postaviti web projekt koji će raditi konfiguraciju Servleta. Za ovo ćemo upotrijebiti Spring's WebApplicationInitializer:

@Order (Ordered.HIGHEST_PRECEDENCE) javna klasa ApplicationInitializer implementira WebApplicationInitializer {@Override public void onStartup (ServletContext servletContext) baca ServletException {AnnotationConfigWebApplicationContextPonctionGontextContetationContetationContetationContetationContextPonctionContextpconfigContextpContextContextPonctionContextPC servletContext.addListener (novi ContextLoaderListener (kontekst)); servletContext.setInitParameter ("contextConfigLocation", "com.baeldung.server"); }}

Ovdje dodajemo @Naruči (naručeno.HIGHEST_PRECEDENCE) napomena kako bi se osiguralo da se naš inicijalizator izvrši prije zadane inicijalizacije Jersey-Spring.

4. Usluga koja koristi Jersey JAX-RS

4.1. Klasa predstavljanja resursa

Upotrijebimo primjer klase predstavljanja resursa:

@XmlRootElement zaposlenik javne klase {private int id; private String firstName; // standardni geteri i postavljači}

Imajte na umu da JAXB bilješke poput @XmlRootElement potrebni su samo ako je potrebna XML podrška (uz JSON).

4.2. Provedba usluge

Pogledajmo sada kako možemo koristiti JAX-RS napomene za stvaranje RESTful web usluga:

@Path ("/ zaposlenici") javna klasa EmployeeResource {@Autowired private EmployeeRepository workerRepository; @GET @Path ("/ {id}") @Produces ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) public Employee getEfficiee (@PathParam ("id") int id) {return workerRepository.getEfficiee (id); } @POST @Consumes ({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) javni odgovor addE Employee (zaposlenik zaposlenik, @Context UriInfo uriInfo) {workerRepository.addEfficiee (novi zaposlenik (zaposlenik.getId (), zaposlenik.getFirstN. getLastName (), worker.getAge ())); vrati Response.status (Response.Status.CREATED.getStatusCode ()) .header ("Location", String.format ("% s /% s", uriInfo.getAbsolutePath (). toString (), worker.getId ()) ).izgraditi(); }}

The @Staza napomena pruža relativni URI put do usluge. Također možemo ugraditi varijable u sintaksu URI-a, kao {iskaznica} varijabla pokazuje. Zatim će se varijable zamijeniti tijekom izvođenja. Da bismo dobili vrijednost varijable možemo koristiti @PathParam bilješka.

@DOBITI, @STAVITI, @POST, @IZBRISATI i @HEAD definirati HTTP metodu zahtjeva, koji će se obraditi anotiranim metodama.

The @Proizvodi napomena definira vrstu odgovora krajnje točke (MIME vrsta medija). U našem smo primjeru konfigurirali da vraća JSON ili XML, ovisno o vrijednosti HTTP zaglavlja Prihvatiti (aplikacija / json ili aplikacija / xml).

S druge strane, @Consumes napomena definira vrste MIME medija koje usluga može koristiti. U našem primjeru usluga može trošiti JSON ili XML, ovisno o HTTP zaglavlju Vrsta sadržaja (aplikacija / json ili aplikacija / xml).

The @Kontekst napomena se koristi za ubrizgavanje podataka u polje klase, svojstvo graha ili parametar metode. U našem primjeru koristimo ga za ubrizgavanje UriInfo. Također ga možemo koristiti za ubrizgavanje ServletConfig, ServletContext, HttpServletRequest i HttpServletResponse.

5. Korištenje ExceptionMapper

ExceptionMapper omogućuje nam presretanje iznimaka i vraćanje klijentu odgovarajućeg koda HTTP odgovora. U sljedećem se primjeru vraća HTTP odgovor kod 404 ako EmployeeNotFound izuzetak je izbačen:

@Provider javna klasa NotFoundExceptionHandler implementira ExceptionMapper {javni odgovor na odgovor (EmployeeNotFound ex) {return Response.status (Response.Status.NOT_FOUND) .build (); }}

6. Upravljanje tečajevima resursa

Konačno, povežimo sve klase implementacije usluge i mape izuzetaka s putom aplikacije:

@ApplicationPath ("/ resources") javna klasa RestConfig proširuje Application {public Set getClasses () {vratiti novi HashSet(Arrays.asList (EmployeeResource.class, NotFoundExceptionHandler.class, AlreadyExistsExceptionHandler.class)); }}

7. API ispitivanje

Ajmo sada testirati API-je s nekoliko testova uživo:

javna klasa JerseyApiLiveTest {private static final String SERVICE_URL = "// localhost: 8082 / spring-jersey / resources / zaposlenici"; @Test public void givenGetAllEfficiees_whenCorrectRequest_thenResponseCodeSuccess () baca ClientProtocolException, IOException {HttpUriRequest request = new HttpGet (SERVICE_URL); HttpResponse httpResponse = HttpClientBuilder .create () .build () .execute (zahtjev); assertEquals (httpResponse .getStatusLine () .getStatusCode (), HttpStatus.SC_OK); }}

8. Zaključak

U ovom smo članku predstavili okvir Jersey-a i razvili jednostavan API. Koristili smo značajke Spring for Dependency Injection. Također smo vidjeli upotrebu ExceptionMapper.

Kao i uvijek, puni izvorni kod dostupan je u ovom projektu Github.

OSTALO dno

Upravo sam najavio novo Uči proljeće tečaj, usredotočen na osnove Spring 5 i Spring Boot 2:

>> PROVJERITE TEČAJ