Erstellen Sie einen RESTful-Dienst in Java mit JAX-RS und Jersey (Celsius in Fahrenheit und Fahrenheit in Celsius)
Veröffentlicht: 2020-03-25
Haben Sie eine der folgenden Fragen/Fragen?
- Schreiben Sie einen Java-REST-Dienst, um Fahrenheit in Celsius und Celsius in Fahrenheit umzuwandeln
- REST mit Java (JAX-RS) unter Verwendung von Jersey
- Konvertierung von Fahrenheit in Celsius-Methode in Java
- Hausaufgabenhilfe mit Umrechnung von Abschlüssen (CtoF, FtoC)
- Java-API für RESTful-Webdienste
- Webservices – Welches ist die beste Java-REST-API?
- REST-API für Java?
- ctof- und ftoc-Tutorial. ctof und ftoc Java-Tutorial
- Erstellen Sie RESTful-Webdienste mit Java-Technologie
- RESTful-Web-API-Framework für Java
RESTful Service
: Representational State Transfer (REST) hat sich im gesamten Web als einfachere Alternative zu SOAP- und Web Services Description Language (WSDL)-basierten Webdiensten durchgesetzt.
REST definiert eine Reihe von Architekturprinzipien, mit denen Sie Webdienste entwerfen können, die sich auf die Ressourcen eines Systems konzentrieren, einschließlich der Art und Weise, wie Ressourcenzustände von einer Vielzahl von Clients, die in verschiedenen Sprachen geschrieben sind, über HTTP adressiert und übertragen werden. Gemessen an der Anzahl der Webservices, die es verwenden, hat sich REST allein in den letzten Jahren zu einem vorherrschenden Designmodell für Webservices entwickelt. Tatsächlich hatte REST einen so großen Einfluss auf das Web, dass es das SOAP- und WSDL-basierte Schnittstellendesign größtenteils verdrängt hat, weil es ein wesentlich einfacher zu verwendender Stil ist.
RUHIG Vs. SOAP-Tutorial.

JAX-RS:
Java API for RESTful Web Services (JAX-RS) ist ein Satz von APIs für Entwickler-REST-Dienste. JAX-RS ist Teil von Java EE6 und erleichtert Entwicklern die Entwicklung von REST-Webanwendungen.
Jersey:
Jersey ist die Open-Source-JAX-RS (JSR 311)-Referenzimplementierung in Produktionsqualität zum Erstellen von RESTful-Webdiensten. Aber es ist auch mehr als die Referenzimplementierung. Jersey stellt eine API bereit, damit Entwickler Jersey entsprechend ihren Anforderungen erweitern können.
Beginnen wir mit der Erstellung einer einfachen RESTful API
mit den folgenden Schritten:
Schritt 1
In Eclipse => Datei => Neu => Dynamisches Webprojekt. Benennen Sie es als „ CrunchifyRESTJerseyExample
“.

Stellen Sie sicher, dass Sie Folgendes eingestellt haben:
- Ziellaufzeit: Apache Tomcat v9.0
- Version des dynamischen Webmoduls: 4.0
Schritt 2
Wenn web.xml
(Bereitstellungsdeskriptor) nicht angezeigt wird, führen Sie diese Schritte aus. ODER
- Rechtsklick auf Projekt
- Wählen Sie
Java EE Tools
- Klicken Sie auf
Generate Deployment Descriptor Stub
Dadurch wird die Datei web.xml
im Ordner /WebContent/WEB-INF/
erstellt.
Schritt 3
Konvertieren Sie Project jetzt in Maven Project
, damit wir die erforderlichen .jar-Dateien als Abhängigkeiten hinzufügen können.
Schritte:
- Rechtsklick auf Projekt
- Klicken Sie auf
Configure
- Wählen Sie die Option
Convert to Maven Project
.


Klicken Sie einfach auf die Finish button
“, ohne Änderungen vorzunehmen.

Schritt 4
Öffnen Sie die Datei pom.xml
und fügen Sie die folgenden Abhängigkeiten hinzu.
- asm.jar
- jersey-bundle.jar
- json.jar
- jersey-server.jar

Hier ist meine pom.xml
-Datei.
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 > |
Schritt-5
Aktualisieren Sie Ihre web.xml-Datei mit dieser. Hier ist meine Kopie der web.xml
-Datei:
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 > |
Schritt-6
- Gehen Sie zu
Java Resources
- Klicken Sie auf Quelle
- Rechtsklick -> Neu -> Klasse
- Paket: com.crunchify.restjersey
- Name: 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>" ; } } |
Schritt-7
Erstellen Sie auf die gleiche Weise 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 ( ) ; } } |
Schritt-8
Lassen Sie uns nun den Eclipse-Arbeitsbereich bereinigen und das Projekt erstellen.

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 |
- Verwenden Sie für
point 3
obenthese screenshots
: Maven Build, Neuinstallation. - Sie sollten eine Build-Erfolgsmeldung sehen.
Schritt-9
Stellen Sie das Projekt CrunchifyRESTJerseyExample
auf Tomcat bereit. Hier sind detaillierte Schritte zum Einrichten von Tomcat auf Eclipse, falls Sie dies noch nicht getan haben.
- Gehen Sie zur Registerkarte Server
- Klicken Sie mit der rechten Maustaste auf Server
- Klicken Sie auf
Add and Remove Projects
- Wählen Sie das Projekt auf der linken Seite aus und klicken Sie auf
Add
- Klicken Sie auf Fertig stellen

Schritt-10
- Starten Sie Tomcat-Server 9.0

Vollständige Projektstruktur:

Hier sind Java-Build-Pfad-Abhängigkeiten:

Stellen Sie sicher, dass Sie JDK 1.8 für dieses Projekt verwenden. Starten von Java 9 – JAXB-, JAX-WS-, JAF-, JTA- und CORBA-Module werden entfernt und Sie müssen diese Module manuell zu Ihrer Maven-pom.xml-Datei hinzufügen.
Alles bereit.
Lassen Sie uns nun Ihren RESTful Web Service testen.
Test 1: Webservice von Celsius zu Fahrenheit without
Parameter
Link: http://localhost:8080/CrunchifyRESTJerseyExample/crunchify/ctofservice/

Test 2: Webservice von Celsius zu Fahrenheit with
Parameter

Test 3: Webdienst Fahrenheit zu Celsius without
Parameter

Test 4: Fahrenheit zu Celsius Webservice with
Parameter

Beispiele für RESTFul-Clients:
- So erstellen Sie einen RESTful-Java-Client mit Apache HttpClient – Beispiel
- So erstellen Sie einen RESTful-Java-Client mit Java.Net.URL – Beispiel
- So erstellen Sie einen RESTful-Java-Client mit dem Jersey-Client – Beispiel
Ein weiteres muss gelesen werden:
- CrunchifyJSONtoHTML.js – Konvertierungsskript für JSON-zu-HTML-Tabellen
- Programmatisches Generieren von Out Of Memory (OOM) in Java
- Wie führt man mehrere Tomcat-Instanzen auf einem Server aus?
- So lesen Sie ein JSON-Objekt aus einer Datei in Java – Crunchify-Tutorial
Haben Sie Probleme beim Ausführen von Code?
Einige Triage-Schritte:
Anfangs habe ich jersey-core
Abhängigkeit verwendet. Aber es wurde auch eine jersey-server
Abhängigkeit hinzugefügt, um das folgende Problem zu vermeiden.
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 ) |
Wenn Sie den obigen Fehler erhalten, versuchen Sie, die unten stehende Maven-Abhängigkeit in Ihre pom.xml-Datei einzufügen
1 2 3 4 5 |
< dependency > < groupId > org . glassfish . jersey . core < / groupId > < artifactId > jersey - server < / artifactId > < version > 2.27 < / version > < / dependency > |