Creați un serviciu RESTful în Java folosind JAX-RS și Jersey (Celsius la Fahrenheit și Fahrenheit la Celsius)
Publicat: 2020-03-25
Aveți una dintre întrebările/întrebarile de mai jos?
- Scrieți un serviciu java REST pentru a converti Fahrenheit în Celsius și Celcius în Fahrenheit
- REST cu Java (JAX-RS) folosind Jersey
- Conversia de la Fahrenheit la metoda Celsius în Java
- Ajutor pentru teme cu conversie de grade (CtoF, FtoC)
- API Java pentru servicii web RESTful
- servicii web – Care este cel mai bun API REST Java?
- REST API pentru Java?
- tutorial ctof și ftoc. ctof și ftoc Java Tutorial
- Creați servicii web RESTful cu tehnologia Java
- Cadrul API web RESTful pentru Java
RESTful Service
: Transferul de stat reprezentativ (REST) a câștigat o acceptare larg răspândită pe web ca o alternativă mai simplă la serviciile web bazate pe SOAP și Web Services Description Language (WSDL).
REST definește un set de principii arhitecturale prin care puteți proiecta servicii Web care se concentrează pe resursele unui sistem, inclusiv modul în care stările resurselor sunt adresate și transferate prin HTTP de către o gamă largă de clienți scrise în diferite limbi. Dacă este măsurat prin numărul de servicii Web care îl folosesc, REST a apărut doar în ultimii câțiva ani ca un model de design de servicii web predominant. De fapt, REST a avut un impact atât de mare asupra Webului încât a înlocuit în mare parte designul de interfață bazat pe SOAP și WSDL, deoarece este un stil considerabil mai simplu de utilizat.
RESTFul vs. Tutorial SOAP.

JAX-RS:
API-ul Java pentru servicii web RESTful (JAX-RS), este un set de API-uri pentru serviciul REST pentru dezvoltatori. JAX-RS face parte din Java EE6 și îi face pe dezvoltatori să dezvolte cu ușurință aplicația web REST.
Jersey:
Jersey este sursa deschisă, calitate de producție, implementare de referință JAX-RS (JSR 311) pentru construirea de servicii web RESTful. Dar, este și mai mult decât implementarea de referință. Jersey oferă un API, astfel încât dezvoltatorii să poată extinde Jersey pentru a se potrivi nevoilor lor.
Să începem să construim un RESTful API
simplu cu pașii de mai jos:
Pasul 1
În Eclipse => Fișier => Nou => Proiect Web dinamic. Numiți-o ca „ CrunchifyRESTJerseyExample
”.

Asigurați-vă că setați:
- Timp de rulare țintă: Apache Tomcat v9.0
- Versiunea modulului web dinamic: 4.0
Pasul 2
Dacă nu vedeți web.xml
(descriptor de implementare), urmați acești pași. SAU
- Faceți clic dreapta pe proiect
- Selectați
Java EE Tools
- Faceți clic pe
Generate Deployment Descriptor Stub
Aceasta va crea fișierul web.xml
în /WebContent/WEB-INF/
.
Pasul 3
Acum convertiți Project în Maven Project
astfel încât să putem adăuga fișierele .jar necesare ca dependențe.
Pași:
- Faceți clic dreapta pe proiect
- Faceți clic pe
Configure
- Selectați opțiunea
Convert to Maven Project
.


Doar faceți clic pe Finish button
fără a face nicio modificare.

Pasul-4
Deschideți fișierul pom.xml
și adăugați mai jos dependențe.
- asm.jar
- fascicul-tricou.borcan
- json.jar
- Jersey-server.jar

Aici este fișierul meu 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 > |
Pasul-5
Actualizați fișierul web.xml cu acesta. Iată copia mea de fișier 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 > |
Pasul-6
- Accesați
Java Resources
- Faceți clic pe src
- Faceți clic dreapta -> Nou -> Clasă
- Pachet: com.crunchify.restjersey
- Nume: 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>" ; } } |
Pasul-7
În același mod, creați 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 ( ) ; } } |
Pasul-8
Acum să curățăm spațiul de lucru Eclipse și să construim proiectul.

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 |
- Pentru
point 3
mai sus, utilizațithese screenshots
de ecran: Maven Build, clean install. - Ar trebui să vedeți mesajul de succes al construirii.
Pasul-9
Implementați proiectul CrunchifyRESTJerseyExample
pe Tomcat. Iată pași detaliați despre cum să configurați Tomcat pe Eclipse dacă nu ați făcut acest lucru.
- Accesați fila Server
- Faceți clic dreapta pe Server
- Faceți clic pe
Add and Remove Projects
- Selectați proiectul din partea stângă și faceți clic pe
Add
- Faceți clic pe Terminare

Pasul-10
- Porniți Tomcat Server 9.0

Structura completă a proiectului:

Iată dependențele de cale de construcție Java:

Asigurați-vă că utilizați JDK 1.8 pentru acest proiect. Pornirea Java 9 – modulele JAXB, JAX-WS, JAF, JTA, CORBA sunt eliminate și trebuie să adăugați acele module manual în fișierul dumneavoastră Maven pom.xml.
Toate gata.
Acum haideți să vă testăm Serviciul Web RESTful.
Test 1: Serviciu web Celsius la Fahrenheit without
parametru
Link: http://localhost:8080/CrunchifyRESTJerseyExample/crunchify/ctofservice/

Testul 2: Serviciu web Celsius la Fahrenheit with
parametru

Testul 3: serviciu web Fahrenheit la Celsius without
parametru

Test 4: serviciu web Fahrenheit la Celsius with
parametru

Exemple de clienți RESTFul:
- Cum se creează client RESTful Java folosind Apache HttpClient – Exemplu
- Cum se creează un client Java RESTful cu Java.Net.URL - Exemplu
- Cum se creează un client Java RESTful cu clientul Jersey – Exemplu
Altul trebuie să citească:
- CrunchifyJSONtoHTML.js – Script de conversie a tabelului JSON în HTML
- Cum se generează din memorie (OOM) în Java programatic
- Cum să rulați mai multe instanțe Tomcat pe un singur server?
- Cum să citiți obiectul JSON din fișier în Java - Tutorial Crunchify
Întâmpinați probleme la rularea codului?
Câțiva pași de triaj:
Inițial am folosit dependența jersey-core
. Dar a adăugat și dependența jersey-server
pentru a evita problema de mai jos.
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 ) |
Dacă primiți eroarea de mai sus, încercați să adăugați mai jos dependența Maven în fișierul pom.xml
1 2 3 4 5 |
< dependency > < groupId > org . glassfish . jersey . core < / groupId > < artifactId > jersey - server < / artifactId > < version > 2.27 < / version > < / dependency > |