Zbuduj usługę RESTful w Javie, używając JAX-RS i Jersey (stopnie Celsjusza do Fahrenheita i Fahrenheita do Celsjusza)
Opublikowany: 2020-03-25
Czy masz jedno z poniższych zapytań/pytań?
- Napisz usługę Java REST, aby przekonwertować stopnie Fahrenheita na stopnie Celsjusza i stopnie Celsjusza na stopnie Fahrenheita
- REST z Javą (JAX-RS) przy użyciu Jersey
- Konwersja z metody Fahrenheita na metodę Celsjusza w Javie
- Pomoc w pracy domowej z przeliczeniem stopni (CtoF, FtoC)
- Java API dla RESTful Web Services
- usługi internetowe – który jest najlepszy Java REST API?
- REST API dla Javy?
- samouczek ctof i ftoc. Samouczek Java ctof i ftoc
- Twórz usługi RESTful Web w technologii Java
- RESTful webowy framework API dla Javy
RESTful Service
: Representational State Transfer (REST) zyskała powszechną akceptację w sieci jako prostsza alternatywa dla usług sieci Web opartych na protokole SOAP i Web Services Description Language (WSDL).
REST definiuje zestaw zasad architektury, zgodnie z którymi można projektować usługi sieci Web, które koncentrują się na zasobach systemu, w tym sposobie adresowania i przesyłania stanów zasobów przez HTTP przez szeroką gamę klientów napisanych w różnych językach. REST, mierzony liczbą korzystających z niego usług sieci Web, pojawił się w ciągu ostatnich kilku lat jako dominujący model projektowania usług sieci Web. W rzeczywistości REST wywarł tak duży wpływ na sieć, że w większości wyparł projektowanie interfejsów oparte na SOAP i WSDL, ponieważ jest to znacznie prostszy styl w użyciu.
RESTFul vs. Samouczek dotyczący mydła.

JAX-RS:
Java API for RESTful Web Services (JAX-RS) to zestaw interfejsów API do deweloperskiej usługi REST. JAX-RS jest częścią Java EE6 i umożliwia programistom łatwe tworzenie aplikacji internetowych REST.
Golf:
Jersey to open source, jakość produkcyjna, JAX-RS (JSR 311) Implementacja referencyjna do budowania usług internetowych RESTful. Ale to także coś więcej niż implementacja referencyjna. Jersey zapewnia interfejs API, dzięki któremu programiści mogą rozszerzać Jersey zgodnie z własnymi potrzebami.
Zacznijmy budować proste RESTful API
od poniższych kroków:
Krok 1
W Eclipse => Plik => Nowy => Dynamiczny projekt internetowy. Nazwij go jako „ CrunchifyRESTJerseyExample
”.

Upewnij się, że ustawiłeś:
- Docelowe środowisko wykonawcze: Apache Tomcat v9.0
- Wersja dynamicznego modułu internetowego: 4.0
Krok 2
Jeśli nie widzisz web.xml
(deskryptora wdrożenia), wykonaj następujące kroki. LUB
- Kliknij prawym przyciskiem myszy projekt
- Wybierz
Java EE Tools
- Kliknij opcję
Generate Deployment Descriptor Stub
Spowoduje to utworzenie pliku web.xml
w folderze /WebContent/WEB-INF/
.
Krok 3
Teraz przekonwertuj Project do Maven Project
, abyśmy mogli dodać wymagane pliki .jar jako zależności.
Kroki:
- Kliknij prawym przyciskiem myszy projekt
- Kliknij
Configure
- Wybierz opcję
Convert to Maven Project
.


Wystarczy kliknąć Finish button
bez wprowadzania zmian.

Krok 4
Otwórz plik pom.xml
i dodaj poniższe zależności.
- asm.jar
- jersey-bundle.jar
- json.jar
- serwer-jersey.jar

Oto mój plik pom.xml
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
< project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns : xsi = "http://www.w3.org/2001/XMLSchema-instance" xsi : schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > < modelVersion > 4.0.0 < / modelVersion > < groupId > CrunchifyRESTJerseyExample < / groupId > < artifactId > CrunchifyRESTJerseyExample < / artifactId > < version > 0.0.1 - SNAPSHOT < / version > < packaging > war < / packaging > < build > < sourceDirectory > src < / sourceDirectory > < plugins > < plugin > < artifactId > maven - compiler - plugin < / artifactId > < version > 3.7.0 < / version > < configuration > < source > 1.7 < / source > < target > 1.7 < / target > < / configuration > < / plugin > < / plugins > < / build > < dependencies > < dependency > < groupId > asm < / groupId > < artifactId > asm < / artifactId > < version > 3.3.1 < / version > < / dependency > < dependency > < groupId > com . sun . jersey < / groupId > < artifactId > jersey - bundle < / artifactId > < version > 1.19.4 < / version > < / dependency > < dependency > < groupId > org . json < / groupId > < artifactId > json < / artifactId > < version > 20170516 < / version > < / dependency > < dependency > < groupId > com . sun . jersey < / groupId > < artifactId > jersey - server < / artifactId > < version > 1.19.4 < / version > < / dependency > < dependency > < groupId > com . sun . jersey < / groupId > < artifactId > jersey - core < / artifactId > < version > 1.19.4 < / version > < / dependency > < / dependencies > < / project > |
Krok-5
Zaktualizuj swój plik web.xml za pomocą tego. Oto moja kopia pliku web.xml
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<? xml version = "1.0" encoding = "UTF-8" ?> < web - app xmlns : xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns : web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi : schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version = "3.0" > < display - name > CrunchifyRESTJerseyExample < / display - name > < welcome - file - list > < welcome - file > index . html < / welcome - file > < welcome - file > index . htm < / welcome - file > < welcome - file > index . jsp < / welcome - file > < welcome - file > default . html < / welcome - file > < welcome - file > default . htm < / welcome - file > < welcome - file > default . jsp < / welcome - file > < / welcome - file - list > < servlet > < servlet - name > Jersey Web Application < / servlet - name > < servlet - class > com . sun . jersey . spi . container . servlet . ServletContainer < / servlet - class > < load - on - startup > 1 < / load - on - startup > < / servlet > < servlet - mapping > < servlet - name > Jersey Web Application < / servlet - name > < url - pattern > / crunchify /* < / url - pattern > < / servlet - mapping > < / web - app > |
Krok-6
- Przejdź do
Java Resources
- Kliknij na src
- Kliknij prawym przyciskiem myszy -> Nowy -> Klasa
- Pakiet: com.crunchify.restjersey
- Nazwa: CtoFService
CtoFService.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
package com . crunchify . restjersey ; /** * @author Crunchify.com * * Description: This program converts unit from Centigrade to Fahrenheit. * Last updated: 12/28/2018 */ import javax . ws . rs . GET ; import javax . ws . rs . Path ; import javax . ws . rs . PathParam ; import javax . ws . rs . Produces ; @ Path ( "/ctofservice" ) public class CtoFService { @ GET @ Produces ( "application/xml" ) public String convertCtoF ( ) { Double fahrenheit ; Double celsius = 36.8 ; fahrenheit = ( ( celsius * 9 ) / 5 ) + 32 ; String result = "@Produces(\"application/xml\") Output: \n\nC to F Converter Output: \n\n" + fahrenheit ; return "<ctofservice>" + "<celsius>" + celsius + "</celsius>" + "<ctofoutput>" + result + "</ctofoutput>" + "</ctofservice>" ; } @ Path ( "{c}" ) @ GET @ Produces ( "application/xml" ) public String convertCtoFfromInput ( @ PathParam ( "c" ) Double c ) { Double fahrenheit ; Double celsius = c ; fahrenheit = ( ( celsius * 9 ) / 5 ) + 32 ; String result = "@Produces(\"application/xml\") Output: \n\nC to F Converter Output: \n\n" + fahrenheit ; return "<ctofservice>" + "<celsius>" + celsius + "</celsius>" + "<ctofoutput>" + result + "</ctofoutput>" + "</ctofservice>" ; } } |
Krok-7
W ten sam sposób utwórz FtoCService.java
FtoCService.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
package com . crunchify . restjersey ; /** * @author Crunchify, LLC * Description: This program converts unit from Fahrenheit to Centigrade. * */ import javax . ws . rs . GET ; import javax . ws . rs . Path ; import javax . ws . rs . PathParam ; import javax . ws . rs . Produces ; import javax . ws . rs . core . Response ; import org . json . JSONException ; import org . json . JSONObject ; @ Path ( "/ftocservice" ) public class FtoCService { @ GET @ Produces ( "application/json" ) public Response convertFtoC ( ) throws JSONException { JSONObject jsonObject = new JSONObject ( ) ; Double fahrenheit = 98.24 ; Double celsius ; celsius = ( fahrenheit - 32 ) * 5 / 9 ; jsonObject . put ( "F Value" , fahrenheit ) ; jsonObject . put ( "C Value" , celsius ) ; String result = "@Produces(\"application/json\") Output: \n\nF to C Converter Output: \n\n" + jsonObject ; return Response . status ( 200 ) . entity ( result ) . build ( ) ; } @ Path ( "{f}" ) @ GET @ Produces ( "application/json" ) public Response convertFtoCfromInput ( @ PathParam ( "f" ) float f ) throws JSONException { JSONObject jsonObject = new JSONObject ( ) ; float celsius ; celsius = ( f - 32 ) * 5 / 9 ; jsonObject . put ( "F Value" , f ) ; jsonObject . put ( "C Value" , celsius ) ; String result = "@Produces(\"application/json\") Output: \n\nF to C Converter Output: \n\n" + jsonObject ; return Response . status ( 200 ) . entity ( result ) . build ( ) ; } } |
Krok 8
Teraz wyczyśćmy obszar roboczy Eclipse i zbudujmy projekt.

1 2 3 |
1. Project - > Clean 2. Project - > Right click - > Maven - > Update Project 3. Project - > Right click - > Run As . . - > Maven Build ( option 5 ) - > Add "clean install" - > Run |
- Dla
point 3
powyżej użyjthese screenshots
: Maven Build, czysta instalacja. - Powinieneś zobaczyć komunikat o powodzeniu kompilacji.
Krok-9
Wdróż projekt CrunchifyRESTJerseyExample
na Tomcat. Oto szczegółowe instrukcje konfiguracji Tomcata w środowisku Eclipse, jeśli jeszcze tego nie zrobiłeś.
- Przejdź do zakładki Serwer
- Kliknij prawym przyciskiem myszy Serwer
- Kliknij
Add and Remove Projects
- Wybierz projekt z lewej strony i kliknij
Add
- Kliknij Zakończ

Krok-10
- Uruchom serwer Tomcat 9.0

Kompletna struktura projektu:

Oto zależności ścieżki kompilacji Java:

Upewnij się, że używasz JDK 1.8 do tego projektu. Uruchamianie Javy 9 – moduły JAXB, JAX-WS, JAF, JTA, CORBA są usuwane i należy je ręcznie dodać do pliku pom.xml Mavena.
Wszystko gotowe.
Teraz przetestujmy usługę sieciową RESTful.
Test 1: usługa internetowa od Celsjusza do Fahrenheita without
parametrów
Link: http://localhost:8080/CrunchifyRESTJerseyExample/crunchify/ctofservice/

Test 2: usługa sieciowa Celsjusza do Fahrenheita with
parametrem

Test 3: usługa internetowa od Fahrenheita do Celsjusza without
parametru!

Test 4: usługa internetowa od Fahrenheita do Celsjusza with
parametrem

Przykłady klientów RESTFul:
- Jak stworzyć klienta Java RESTful za pomocą Apache HttpClient – przykład
- Jak stworzyć klienta Java RESTful z Java.Net.URL – przykład
- Jak stworzyć klienta Java RESTful z klientem Jersey – przykład
Inny musi przeczytać:
- CrunchifyJSONtoHTML.js – Skrypt konwertera tabel JSON na HTML
- Jak programowo generować brak pamięci (OOM) w Javie?
- Jak uruchomić wiele instancji Tomcata na jednym serwerze?
- Jak czytać obiekt JSON z pliku w Javie – samouczek Crunchify
Masz problem z uruchomieniem kodu?
Niektóre etapy segregacji:
Początkowo używałem zależności jersey-core
. Ale dodano również zależność jersey-server
aby uniknąć poniższego problemu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
SEVERE : Servlet [ Jersey Web Application ] in web application [ / CrunchifyRESTJerseyExample ] threw load ( ) exception java . lang . ClassNotFoundException : com . sun . jersey . spi . container . servlet . ServletContainer at org . apache . catalina . loader . WebappClassLoaderBase . loadClass ( WebappClassLoaderBase . java : 1328 ) at org . apache . catalina . loader . WebappClassLoaderBase . loadClass ( WebappClassLoaderBase . java : 1157 ) at org . apache . catalina . core . DefaultInstanceManager . loadClass ( DefaultInstanceManager . java : 542 ) at org . apache . catalina . core . DefaultInstanceManager . loadClassMaybePrivileged ( DefaultInstanceManager . java : 523 ) at org . apache . catalina . core . DefaultInstanceManager . newInstance ( DefaultInstanceManager . java : 150 ) at org . apache . catalina . core . StandardWrapper . loadServlet ( StandardWrapper . java : 1032 ) at org . apache . catalina . core . StandardWrapper . load ( StandardWrapper . java : 971 ) at org . apache . catalina . core . StandardContext . loadOnStartup ( StandardContext . java : 4829 ) at org . apache . catalina . core . StandardContext . startInternal ( StandardContext . java : 5143 ) at org . apache . catalina . util . LifecycleBase . start ( LifecycleBase . java : 183 ) at org . apache . catalina . core . ContainerBase $ StartChild . call ( ContainerBase . java : 1432 ) at org . apache . catalina . core . ContainerBase $ StartChild . call ( ContainerBase . java : 1422 ) at java . base / java . util . concurrent . FutureTask . run ( FutureTask . java : 264 ) at org . apache . tomcat . util . threads . InlineExecutorService . execute ( InlineExecutorService . java : 75 ) at java . base / java . util . concurrent . AbstractExecutorService . submit ( AbstractExecutorService . java : 140 ) at org . apache . catalina . core . ContainerBase . startInternal ( ContainerBase . java : 944 ) at org . apache . catalina . core . StandardHost . startInternal ( StandardHost . java : 831 ) at org . apache . catalina . util . LifecycleBase . start ( LifecycleBase . java : 183 ) at org . apache . catalina . core . ContainerBase $ StartChild . call ( ContainerBase . java : 1432 ) at org . apache . catalina . core . ContainerBase $ StartChild . call ( ContainerBase . java : 1422 ) at java . base / java . util . concurrent . FutureTask . run ( FutureTask . java : 264 ) at org . apache . tomcat . util . threads . InlineExecutorService . execute ( InlineExecutorService . java : 75 ) at java . base / java . util . concurrent . AbstractExecutorService . submit ( AbstractExecutorService . java : 140 ) at org . apache . catalina . core . ContainerBase . startInternal ( ContainerBase . java : 944 ) at org . apache . catalina . core . StandardEngine . startInternal ( StandardEngine . java : 261 ) at org . apache . catalina . util . LifecycleBase . start ( LifecycleBase . java : 183 ) at org . apache . catalina . core . StandardService . startInternal ( StandardService . java : 422 ) at org . apache . catalina . util . LifecycleBase . start ( LifecycleBase . java : 183 ) at org . apache . catalina . core . StandardServer . startInternal ( StandardServer . java : 801 ) at org . apache . catalina . util . LifecycleBase . start ( LifecycleBase . java : 183 ) at org . apache . catalina . startup . Catalina . start ( Catalina . java : 695 ) at java . base / jdk . internal . reflect . NativeMethodAccessorImpl . invoke0 ( Native Method ) at java . base / jdk . internal . reflect . NativeMethodAccessorImpl . invoke ( NativeMethodAccessorImpl . java : 62 ) at java . base / jdk . internal . reflect . DelegatingMethodAccessorImpl . invoke ( DelegatingMethodAccessorImpl . java : 43 ) at java . base / java . lang . reflect . Method . invoke ( Method . java : 566 ) at org . apache . catalina . startup . Bootstrap . start ( Bootstrap . java : 350 ) at org . apache . catalina . startup . Bootstrap . main ( Bootstrap . java : 492 ) |
Jeśli otrzymujesz powyższy błąd, spróbuj dodać poniższą zależność maven do pliku pom.xml
1 2 3 4 5 |
< dependency > < groupId > org . glassfish . jersey . core < / groupId > < artifactId > jersey - server < / artifactId > < version > 2.27 < / version > < / dependency > |