JAX-RS ve Jersey kullanarak Java'da RESTful Service oluşturun (Celsius'tan Fahrenheit'e ve Fahrenheit'ten Celsius'a)
Yayınlanan: 2020-03-25
Aşağıdaki sorgu/sorunuz var mı?
- Fahrenheit'i Celsius'a ve Celcius'u Fahrenheit'e dönüştürmek için bir Java REST hizmeti yazın
- Jersey kullanarak Java (JAX-RS) ile REST
- Java'da Fahrenhayt'tan Santigrat Yöntemine Dönüşüm
- Derecelerin dönüştürülmesi ile ev ödevi yardımı (CtoF, FtoC)
- RESTful Web Servisleri için Java API
- web servisleri – En iyi Java REST API'si hangisidir?
- Java için REST API?
- ctof ve ftoc öğreticisi. ctof ve ftoc Java Eğitimi
- Java teknolojisiyle RESTful Web hizmetleri oluşturun
- Java için RESTful web API çerçevesi
RESTful Service : Temsili Durum Transferi (REST), SOAP ve Web Hizmetleri Açıklama Dili (WSDL) tabanlı Web hizmetlerine daha basit bir alternatif olarak Web'de yaygın olarak kabul görmüştür.
REST, farklı dillerde yazılmış çok çeşitli istemciler tarafından kaynak durumlarının nasıl adreslendiği ve HTTP üzerinden aktarıldığı da dahil olmak üzere, bir sistemin kaynaklarına odaklanan Web hizmetlerini tasarlayabileceğiniz bir dizi mimari ilkeyi tanımlar. Onu kullanan Web servislerinin sayısı ile ölçülürse, REST sadece son birkaç yılda baskın bir Web servis tasarım modeli olarak ortaya çıkmıştır. Aslında, REST Web üzerinde o kadar büyük bir etkiye sahipti ki, kullanımı oldukça basit bir stil olduğu için çoğunlukla SOAP ve WSDL tabanlı arayüz tasarımının yerini aldı.
RESTFul Vs. SABUN Eğitimi.

JAX-RS:
RESTful Web Hizmetleri için Java API (JAX-RS), API'lerin geliştirici REST hizmetine yönelik bir kümedir. JAX-RS, Java EE6'nın bir parçasıdır ve geliştiricilerin REST web uygulamasını kolayca geliştirmelerini sağlar.
Jersey:
Jersey, RESTful Web hizmetleri oluşturmak için açık kaynak, üretim kalitesi, JAX-RS (JSR 311) Referans Uygulamasıdır. Ancak, aynı zamanda Referans Uygulamasından daha fazlasıdır. Jersey, geliştiricilerin Jersey'i ihtiyaçlarına göre genişletebilmeleri için bir API sağlar.
Aşağıdaki adımlarla basit RESTful API oluşturmaya başlayalım:
Aşama 1
Eclipse => Dosya => Yeni => Dinamik Web Projesi'nde. “ CrunchifyRESTJerseyExample ” olarak adlandırın.

Şunları ayarladığınızdan emin olun:
- Hedef çalışma zamanı: Apache Tomcat v9.0
- Dinamik web modülü sürümü: 4.0
Adım 2
web.xml (dağıtım tanımlayıcısı) görmüyorsanız aşağıdaki adımları izleyin. VEYA
- Projeye sağ tıklayın
-
Java EE ToolsSeçin -
Generate Deployment Descriptor Stubtıklayın
Bu, /WebContent/WEB-INF/ klasörü altında web.xml dosyası oluşturacaktır.
Aşama 3
Şimdi, gerekli .jar dosyalarını bağımlılık olarak ekleyebilmemiz için Maven Project dönüştürün.
Adımlar:
- Projeye sağ tıklayın
-
Configuretıklayın -
Convert to Maven Projectseçeneğini seçin.


Herhangi bir değişiklik yapmadan Finish button tıklamanız yeterlidir.

4. Adım
pom.xml dosyasını açın ve aşağıdaki bağımlılıkları ekleyin.
- asm.jar
- jersey-bundle.jar
- json.jar
- jersey-server.jar

İşte benim 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 > |
Adım 5
web.xml dosyanızı bununla güncelleyin. İşte benim web.xml dosya kopyam:
|
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 > |
Adım-6
-
Java ResourcesGit - src'ye tıklayın
- Sağ tıklayın -> Yeni -> Sınıf
- Paket: com.crunchify.restjersey
- İsim: 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>" ; } } |
Adım-7
Aynı şekilde FtoCService.java oluşturun
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 ( ) ; } } |
Adım-8
Şimdi Eclipse çalışma alanını temizleyelim ve proje oluşturalım.

|
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 |
- Yukarıdaki
point 3içinthese screenshotskullanın: Maven Build, temiz kurulum. - Derleme başarısı mesajını görmelisiniz.
Adım-9
CrunchifyRESTJerseyExample projesini dağıtın. Henüz yapmadıysanız, Eclipse'de Tomcat'i nasıl kuracağınıza ilişkin ayrıntılı adımlar burada verilmiştir.
- Sunucu Sekmesine Git
- Sunucuya sağ tıklayın
-
Add and Remove Projectstıklayın - Projeyi sol taraftan seçin ve
Addtıklayın - Bitir'i tıklayın

Adım-10
- Tomcat Server 9.0'ı başlatın

Komple proje yapısı:

İşte Java Yapı Yolu Bağımlılıkları:

Bu proje için JDK 1.8 kullandığınızdan emin olun. Java 9'u başlatma – JAXB, JAX-WS, JAF, JTA, CORBA modülleri kaldırılır ve bu modülleri Maven pom.xml dosyanıza manuel olarak eklemeniz gerekir.
Hepsi hazır.
Şimdi RESTful Web Service'inizi test edelim.
Test 1: Parametre without Celsius'tan Fahrenheit'e web hizmeti
Bağlantı: http://localhost:8080/CrunchifyRESTJerseyExample/crunchify/ctofservice/

Test 2: Parametre with Santigrattan Fahrenhayt'a web hizmeti

Test 3: Parametre without Fahrenhayt'tan Celsius web hizmetine

Test 4: Parametre with Fahrenhayt'tan Celsius web hizmetine

RESTFul İstemci Örnekleri:
- Apache HttpClient Kullanarak RESTful Java İstemcisi Nasıl Oluşturulur – Örnek
- Java.Net.URL ile RESTful Java İstemcisi Nasıl Oluşturulur – Örnek
- Jersey İstemcisi ile RESTful Java İstemcisi Nasıl Oluşturulur – Örnek
Bir diğeri okumalı:
- CrunchifyJSONtoHTML.js – JSON'dan HTML tablosuna Dönüştürücü Komut Dosyası
- Java'da Programlı Olarak Bellek Yetersiz (OOM) Nasıl Oluşturulur
- Bir Sunucuda Birden Çok Tomcat Örneği Nasıl Çalıştırılır?
- Java Dosyasından JSON Nesnesi Nasıl Okunur – Crunchify Eğitimi
Kodu çalıştırırken sorun mu yaşıyorsunuz?
Bazı triyaj adımları:
Başlangıçta jersey-core bağımlılığını kullandım. Ancak, aşağıdaki sorunu önlemek için jersey-server bağımlılığı da eklendi.
|
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 ) |
Yukarıdaki hatayı alıyorsanız, pom.xml dosyanıza aşağıdaki maven bağımlılığını eklemeyi deneyin.
|
1 2 3 4 5 |
< dependency > < groupId > org . glassfish . jersey . core < / groupId > < artifactId > jersey - server < / artifactId > < version > 2.27 < / version > < / dependency > |
