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
9
18156 Total Views 1 Views Today

2 thoughts on “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)

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