Создание службы RESTful на Java с использованием JAX-RS и Джерси (градусы Цельсия в градусы Фаренгейта и градусы Фаренгейта в градусах Цельсия)
Опубликовано: 2020-03-25
У вас есть один из следующих запросов/вопросов?
- Напишите службу java REST для преобразования градусов Фаренгейта в градусы Цельсия и Цельсия в градусы Фаренгейта.
- REST с Java (JAX-RS) с использованием Джерси
- Преобразование из метода Фаренгейта в Цельсия в Java
- Помощь в выполнении домашних заданий с конвертацией степеней (CtoF, FtoC)
- API Java для веб-служб RESTful
- веб-сервисы — какой лучший Java REST API?
- REST API для Java?
- Учебник по ctof и ftoc. ctof и ftoc Учебник по Java
- Создавайте веб-сервисы RESTful с помощью технологии Java
- Фреймворк веб-API RESTful для Java
RESTful Service
: передача репрезентативного состояния (REST) получила широкое признание в Интернете как более простая альтернатива веб-службам на основе SOAP и языка описания веб-служб (WSDL).
REST определяет набор архитектурных принципов, с помощью которых вы можете разрабатывать веб-службы, ориентированные на системные ресурсы, включая то, как состояния ресурсов адресуются и передаются по HTTP широким кругом клиентов, написанных на разных языках. Если судить по количеству веб-сервисов, которые его используют, то только за последние несколько лет REST стал преобладающей моделью проектирования веб-сервисов. На самом деле, REST оказал такое большое влияние на Интернет, что в основном вытеснил дизайн интерфейса на основе SOAP и WSDL, потому что это значительно более простой стиль в использовании.
RESTFul против. Учебник по мылу.

ДЖАКС-РС:
API Java для веб-служб RESTful (JAX-RS) — это набор API для службы REST разработчика. JAX-RS является частью Java EE6 и позволяет разработчикам легко разрабатывать веб-приложения REST.
Джерси:
Jersey — это эталонная реализация стандарта JAX-RS (JSR 311) с открытым исходным кодом для создания веб-сервисов RESTful. Но это также больше, чем эталонная реализация. Jersey предоставляет API, чтобы разработчики могли расширять возможности Jersey в соответствии со своими потребностями.
Давайте начнем создавать простой RESTful API
со следующих шагов:
Шаг 1
В Eclipse => Файл => Создать => Динамический веб-проект. Назовите его « 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
- Джерси-bundle.jar
- json.jar
- Джерси-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
- Нажмите на источник
- Щелкните правой кнопкой мыши -> Создать -> Класс
- Пакет: com.crunchify.restjersey
- Имя: КтоФСервис
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:

Убедитесь, что вы используете JDK 1.8 для этого проекта. Запуск Java 9 — модули JAXB, JAX-WS, JAF, JTA, CORBA удалены, и вам необходимо вручную добавить эти модули в файл Maven pom.xml.
Все готово.
Теперь давайте проверим ваш веб-сервис RESTful.
Тест 1: веб-сервис преобразования градусов Цельсия в градусы Фаренгейта without
параметра
Ссылка: http://localhost:8080/CrunchifyRESTJerseyExample/crunchify/ctofservice/

Тест 2: веб-сервис преобразования градусов Цельсия в градусы Фаренгейта with
параметром

Тест 3: веб-сервис преобразования Фаренгейта в Цельсий without
параметра

Тест 4: Веб-сервис преобразования Фаренгейта в Цельсий with
параметром

Примеры клиентов RESTFul:
- Как создать RESTful Java-клиент с помощью Apache HttpClient — пример
- Как создать RESTful Java-клиент с помощью Java.Net.URL — пример
- Как создать RESTful Java-клиент с помощью Джерси-клиента — пример
Другой должен прочитать:
- CrunchifyJSONtoHTML.js — скрипт конвертера таблиц JSON в HTML
- Как сгенерировать нехватку памяти (OOM) в Java программно
- Как запустить несколько экземпляров Tomcat на одном сервере?
- Как прочитать объект JSON из файла в Java — учебник по Crunchify
Возникли проблемы с запуском кода?
Некоторые этапы сортировки:
Первоначально я использовал зависимость от 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 > |