RESTFul java веб сервис. Пример Hello World example

Пример Java web-service с использованием технологии REST.

Используемые технологии и библиотеки
  • Apache CXF 3.1.6
  • Spring MVC 4.3.0.Release

1. Описание задачи

Создать простейший веб сервис с использованием технологии REST. Написать простой класс веб сервиса на стороне сервера и обратиться к нему с помощью кода клиентской части.

2. Структура проекта

RestProjectStructure

Создан один класс описывающий REST веб-сервис (HelloRest). Для демонстрации вывода Java объекта в xml формате используются два класса (Goods, Document). Клиентская часть находится в классе JavaStudyWS и запускается в методе main.

3. pom.xml

Для реализации веб-сервиса используется библиотека Apache CXF.

4. web.xml

Для удобства запуска была добавлена зависимость для Spring. Файл с настройками application-context.xml (в нем находится описание RESTful веб-сервиса) добавлен дескриптор развертывания. Так же был добавлен mvc-config.xml (не используется) в параметры инициализации init-param диспетчера сервлетов, чтобы приложение не ругалось на отсутствие файла с настройками (dispatcher-servlet.xml).

web.xml:

Для реализации веб-сервиса используется реализация Jax-RS API — Apache CXF. Создан сервлет и задан шаблон URL по которому он будет срабатывать (/rest/*).

5. application-context.xml

Настройки Spring были добавлены лишь для удобства быстрого описания веб-сервиса. Это не обязательно и веб-сервис можно задавать другими способами.

Здесь прописан веб сервис с id = helloRestService. Он будет доступен по ссылке, которая формируется из пути сервера + маппинг сервлета + адреса обработки сервиса (в данном случае совпадает с id).

6. Rest сервис

Был создан простейший веб сервис по технологии REST.

В аннотациях к методам описан HTTP метод по которому они будут срабатывать (в данном случае GET), путь (маппинг) и в каком виде будет предоставлен ответ (xml).

7. Модель данных

Созданы два демонстрационных класса, которые будут преобразовываться в xml формат и передаваться клиенту. У классов задана аннотация @XmlRootElement с помощью которой присваивается имя для корневого xml элемента в ответе (см. далее запуск приложения).

Goods:

Document:

8. Rest клиент

Для тестирования нашего сервиса был создан код, имитирующий клиентскую сторону.

JavaStudyWS:

Здесь создается экземпляр веб сервиса, задается адрес и параметры HTTP заголовка. Далее вызывается один из методов, который соответствует значению из restServiceUrl (в этом случае метод getDocument()).

9. Запуск веб сервиса

После запуска веб сервиса его можно вызвать прямо в браузере. Например метод getDocument() вызывается по ссылке http://localhost:8080/rest/helloRestService/getdoc.

restTest

Аналогично для метода getGoods().

Если запустить main метод класса JavaStudyWS, то мы увидим ответ веб-сервиса в консоли.

restTestClient

 

Таким образом можно создать простейший RESTful веб сервис java.

 

Исходный код

Rest Hello world

Share Button
4398 Total Views 12 Views Today
Комментарии (2) для “RESTFul java веб сервис. Пример Hello World example
  1. sir.mllmn:

    Спасибо большое за пример, но было бы круто так же описать деплой веб-сервиса — или в коротком виде как сделать через идею (фасеты, модули etc) или в полном виде. Спасибо большое.

  2. igorek9191:

    Спасибо за статью, но к сожалению приложение не запускается.

    INFO: Retrying requestINFO: Retrying requestException in thread «main» java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at java.net.Socket.connect(Socket.java:538) at java.net.Socket.<init>(Socket.java:434) at java.net.Socket.<init>(Socket.java:286) at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:80) at org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java:122) at org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:707) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:387) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323) at ru.javastudy.ws.main.JavaStudyWS.main(JavaStudyWS.java:32)

Добавить комментарий