สร้าง RESTful Service ใน Java โดยใช้ JAX-RS และ Jersey (เซลเซียสถึงฟาเรนไฮต์ & ฟาเรนไฮต์เป็นเซลเซียส)
เผยแพร่แล้ว: 2020-03-25
คุณมีคำถาม / คำถามด้านล่างหรือไม่?
- เขียนบริการ java REST เพื่อแปลงฟาเรนไฮต์เป็นเซลเซียสและเซลเซียสเป็นฟาเรนไฮต์
- REST กับ Java (JAX-RS) โดยใช้ Jersey
- การแปลงจากวิธีฟาเรนไฮต์เป็นเซลเซียสใน Java
- ช่วยทำการบ้านด้วยการแปลงองศา (CtoF, FtoC)
- Java API สำหรับ RESTful Web Services
- บริการเว็บ – Java REST API ใดดีที่สุด
- REST API สำหรับ Java?
- ctof และ ftoc กวดวิชา ctof และ ftoc Java Tutorial
- สร้าง RESTful Web services ด้วยเทคโนโลยี Java
- เฟรมเวิร์ก API เว็บ RESTful สำหรับ Java
RESTful Service
: Representational State Transfer (REST) ได้รับการยอมรับอย่างกว้างขวางทั่วทั้งเว็บ โดยเป็นทางเลือกที่ง่ายกว่าสำหรับบริการบนเว็บที่ใช้ SOAP และ Web Services Description Language (WSDL)
REST กำหนดชุดของหลักการทางสถาปัตยกรรมโดยที่คุณสามารถออกแบบบริการเว็บที่เน้นทรัพยากรของระบบ รวมถึงวิธีการระบุสถานะทรัพยากรและถ่ายโอนผ่าน HTTP โดยไคลเอนต์ที่หลากหลายที่เขียนในภาษาต่างๆ หากวัดจากจำนวนเว็บเซอร์วิสที่ใช้งาน REST ได้กลายมาเป็นรูปแบบการออกแบบบริการเว็บที่โดดเด่นในช่วงไม่กี่ปีที่ผ่านมา อันที่จริง REST มีผลกระทบอย่างมากต่อเว็บ ซึ่งส่วนใหญ่แล้วจะแทนที่การออกแบบอินเทอร์เฟซที่ใช้ SOAP และ WSDL เนื่องจากเป็นรูปแบบที่ใช้ง่ายกว่ามาก
RESTFul เทียบกับ สบู่กวดวิชา

JAX-อาร์เอส:
Java API สำหรับ RESTful Web Services (JAX-RS) เป็นชุดหาก API ไปสู่บริการ REST ของนักพัฒนา JAX-RS เป็นส่วนหนึ่งของ Java EE6 และทำให้นักพัฒนาสามารถพัฒนาเว็บแอปพลิเคชัน REST ได้อย่างง่ายดาย
เจอร์ซีย์:
Jersey เป็นโอเพ่นซอร์ส คุณภาพการผลิต JAX-RS (JSR 311) Reference Implementation for building RESTful Web services แต่ยังเป็นมากกว่าการดำเนินการอ้างอิง Jersey มี API เพื่อให้นักพัฒนาสามารถขยาย Jersey เพื่อให้เหมาะกับความต้องการของพวกเขา
มาเริ่มสร้าง RESTful API
ง่ายๆ ด้วยขั้นตอนด้านล่าง:
ขั้นตอนที่ 1
ใน Eclipse => File => New => Dynamic Web Project ตั้งชื่อเป็น “ CrunchifyRESTJerseyExample
“

ตรวจสอบให้แน่ใจว่าคุณตั้งค่า:
- รันไทม์เป้าหมาย: Apache Tomcat v9.0
- เวอร์ชันเว็บโมดูลแบบไดนามิก: 4.0
ขั้นตอนที่ 2
หากคุณไม่เห็น web.xml
(ตัวอธิบายการทำให้ใช้งานได้) ให้ทำตามขั้นตอนเหล่านี้ หรือ
- คลิกขวาที่โครงการ
- เลือก
Java EE Tools
- คลิกที่
Generate Deployment Descriptor Stub
สิ่งนี้จะสร้างไฟล์ web.xml
ใต้ /WebContent/WEB-INF/
ขั้นตอนที่ 3
ตอนนี้แปลง Project เป็น Maven Project
เพื่อให้เราสามารถเพิ่มไฟล์ .jar ที่จำเป็นเป็นการพึ่งพาได้
ขั้นตอน:
- คลิกขวาที่โครงการ
- คลิกที่
Configure
- เลือกตัวเลือก
Convert to Maven Project


เพียงคลิกที่ Finish button
โดยไม่ต้องทำการเปลี่ยนแปลงใดๆ

ขั้นตอนที่ 4
เปิดไฟล์ pom.xml
และเพิ่มการพึ่งพาด้านล่าง
- asm.jar
- jersey-bundle.jar
- json.jar
- jersey-server.jar

นี่คือไฟล์ 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 > |
ขั้นตอนที่ -5
อัปเดตไฟล์ web.xml ของคุณด้วยไฟล์นี้ นี่คือสำเนาไฟล์ 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 > |
ขั้นตอนที่ 6
- ไปที่
Java Resources
- คลิกที่ src
- คลิกขวา -> ใหม่ -> คลาส
- แพ็คเกจ: com.crunchify.restjersey
- ชื่อ: 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>" ; } } |
ขั้นตอนที่ 7
วิธีเดียวกันสร้าง 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 ( ) ; } } |
ขั้นตอนที่-8
ตอนนี้ มาทำความสะอาดพื้นที่ทำงาน eclipse และสร้างโปรเจ็กต์กัน

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 |
- สำหรับ
point 3
ข้างต้น ให้ใช้these screenshots
: Maven Build, ติดตั้งใหม่ทั้งหมด - คุณควรเห็นข้อความสร้างความสำเร็จ
ขั้นตอนที่ 9
ปรับใช้โครงการ CrunchifyRESTJerseyExample
บน Tomcat ต่อไปนี้เป็นขั้นตอนโดยละเอียดเกี่ยวกับวิธีตั้งค่า Tomcat บน Eclipse หากคุณยังไม่ได้ดำเนินการ
- ไปที่แท็บเซิร์ฟเวอร์
- คลิกขวาที่เซิร์ฟเวอร์
- คลิกที่
Add and Remove Projects
- โครงการเลือกจากด้านซ้ายและคลิกที่
Add
- คลิกเสร็จสิ้น

ขั้นตอนที่ -10
- เริ่ม Tomcat Server 9.0

โครงสร้างโครงการที่สมบูรณ์:

นี่คือการพึ่งพา Java Build Path:

ตรวจสอบให้แน่ใจว่าคุณใช้ JDK 1.8 สำหรับโครงการนี้ การเริ่ม Java 9 – โมดูล JAXB, JAX-WS, JAF, JTA, CORBA จะถูกลบออก และคุณจำเป็นต้องเพิ่มโมดูลเหล่านั้นด้วยตนเองในไฟล์ Maven pom.xml ของคุณ
ทุกชุด.
ตอนนี้ มาทดสอบ RESTful Web Service ของคุณกัน
ทดสอบ 1: บริการเว็บเซลเซียสถึงฟาเรนไฮต์ without
พารามิเตอร์
ลิงก์: http://localhost:8080/CrunchifyRESTJerseyExample/crunchify/ctofservice/

ทดสอบ 2: บริการเว็บเซลเซียสถึงฟาเรนไฮต์ with
พารามิเตอร์

ทดสอบ 3: บริการเว็บฟาเรนไฮต์ถึงเซลเซียส without
พารามิเตอร์

ทดสอบ 4: บริการเว็บฟาเรนไฮต์ถึงเซลเซียส with
พารามิเตอร์

ตัวอย่างไคลเอ็นต์ RESTFul:
- วิธีสร้าง RESTful Java Client โดยใช้ Apache HttpClient – Example
- วิธีสร้าง RESTful Java Client ด้วย Java.Net.URL – Example
- วิธีสร้าง RESTful Java Client ด้วย Jersey Client – Example
ต้องอ่านอีก:
- CrunchifyJSONtoHTML.js – สคริปต์ตัวแปลงตาราง JSON เป็น HTML
- วิธีสร้างหน่วยความจำไม่เพียงพอ (OOM) ใน Java โดยทางโปรแกรม
- วิธีเรียกใช้อินสแตนซ์ Tomcat หลายตัวบนเซิร์ฟเวอร์เดียว
- วิธีอ่านวัตถุ JSON จากไฟล์ใน Java – Crunchify Tutorial
มีปัญหาในการรันโค้ด?
ขั้นตอนการคัดแยกบางส่วน:
ตอนแรกฉันใช้การพึ่งพา jersey-core
แต่เพิ่มการพึ่งพา jersey-server
เพื่อหลีกเลี่ยงปัญหาด้านล่าง
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 ) |
หากคุณได้รับข้อผิดพลาดข้างต้น ให้ลองเพิ่มการพึ่งพา maven ด้านล่างลงในไฟล์ pom.xml ของคุณ
1 2 3 4 5 |
< dependency > < groupId > org . glassfish . jersey . core < / groupId > < artifactId > jersey - server < / artifactId > < version > 2.27 < / version > < / dependency > |