REST with Jersey 2.x : start (part 1)
Jersey один из популярных фреймворкок для создание RESTFull веб сервисов. Реализуюет спецификацию JAX-RS(JSR311 & JSP 339).
На данный момент последняя версия 2.4.
Чем он хорош - простой, понятный, ничего лишнего.
Запущу небольшой пример на Glassfish.
Краткий план действий.
1. Создание простого веб сервиса.
2. Конфигурация и деплой.
3. Работа с json.
1. Создание простого веб сервиса.
В документации сказано, что при использовании Glassfish, достаточно объявить зависимость:
Репозиторий центральный мавеновский. Все подгружается без дополнительных указаний.
И создам простейший сервис возвращающий строку.
@Produces(MediaType.TEXT_PLAIN) говорит о возвращаемом типе - строка. Этот сервис должен возвращать строку по относительному урлу rest/say.
Но пока еще запускать рано. Нетбинс выдает такое предупреждение:
2. Конфигурация и деплой.
При использовании контейнера сервлетов, поддерживающего servlet 3.0, можно сконфигурировать добавив подобный класс:
Для ResourceConfig нужно добавить зависимость:
Это только один из способов конфигурации. В данном случае не нужен web.xml. Для Jersey версий 1.x он понадобится.
Итого, что получается:
И запустив :
3. Работа с json
JSON - формат передачи данных.
Существуие несколько json провайдеров для работы с json объектами и конвертации в java объекты. Jackson, MOXy, Jettisson и др.
Остановлюсь на Jackson.
Пусть веб сервис будет возвращать некий класс:
Теперь ожидается что по урл rest/mycat будет возвращен json объект.
Чтобы все заработало, в pom.xml необходимо добавить зависимость jackson библ:
Т.к никаких дополнительных фич не использую, достаточно добавить в конфигурацию одну строку:
И, внимание, запуск... Возникает досадный эксепшн:
SEVERE: Mapped exception to response: 500 (Internal Server Error)
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class com.str.jersey.model.CrazyCat, and Java type class com.str.jersey.model.CrazyCat, and MIME media type application/json was not found
Казалось бы все на месте согласно документации. Решение было найдено на stackoverflow.
Добавить еще одну зависимость:
Итого:
На этот раз запуск успешен:
Netbeans 7.4
Glassfish 3.1.2
Maven наше всё :)
Бессменная документация Jersey.
SVN с исходниками получившегося.
Stackoverflow о спобобах деплоя JAX-RS.
На данный момент последняя версия 2.4.
Чем он хорош - простой, понятный, ничего лишнего.
Запущу небольшой пример на Glassfish.
Краткий план действий.
1. Создание простого веб сервиса.
2. Конфигурация и деплой.
3. Работа с json.
1. Создание простого веб сервиса.
В документации сказано, что при использовании Glassfish, достаточно объявить зависимость:
<dependency> <groupid>javax.ws.rs</groupid> <artifactid>javax.ws.rs-api</artifactid> <version>2.0</version> <scope>provided</scope> </dependency>
Репозиторий центральный мавеновский. Все подгружается без дополнительных указаний.
И создам простейший сервис возвращающий строку.
package com.str.jersey.service; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path(value = "/rest") public class JerseyService { @GET @Path("/say") @Produces(MediaType.TEXT_PLAIN) public String say(){ return "Wonderful!"; } }
@Produces(MediaType.TEXT_PLAIN) говорит о возвращаемом типе - строка. Этот сервис должен возвращать строку по относительному урлу rest/say.
Но пока еще запускать рано. Нетбинс выдает такое предупреждение:
В проекте нет конфигурации. |
2. Конфигурация и деплой.
При использовании контейнера сервлетов, поддерживающего servlet 3.0, можно сконфигурировать добавив подобный класс:
package com.str.jersey.application; import javax.ws.rs.ApplicationPath; import org.glassfish.jersey.server.ResourceConfig; @ApplicationPath(value = "/") public class MyApplication extends ResourceConfig { public MyApplication () { packages("com.str.jersey.service"); } }
Для ResourceConfig нужно добавить зависимость:
<dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> <version>2.4</version> <type>jar</type> </dependency>
Это только один из способов конфигурации. В данном случае не нужен web.xml. Для Jersey версий 1.x он понадобится.
Итого, что получается:
Проект готов к запуску. |
3. Работа с json
JSON - формат передачи данных.
Существуие несколько json провайдеров для работы с json объектами и конвертации в java объекты. Jackson, MOXy, Jettisson и др.
Остановлюсь на Jackson.
Пусть веб сервис будет возвращать некий класс:
@GET @Path("/mycat") @Produces(MediaType.APPLICATION_JSON) public CrazyCat getMyCat(){ CrazyCat cat = new CrazyCat(); cat.setEyes("green"); return cat; }
Теперь ожидается что по урл rest/mycat будет возвращен json объект.
Чтобы все заработало, в pom.xml необходимо добавить зависимость jackson библ:
<dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.4</version> </dependency>
Т.к никаких дополнительных фич не использую, достаточно добавить в конфигурацию одну строку:
@ApplicationPath(value = "/") public class MyApplication extends ResourceConfig { public MyApplication() { packages("com.str.jersey.service"); register(JacksonFeature.class); } }
И, внимание, запуск... Возникает досадный эксепшн:
SEVERE: Mapped exception to response: 500 (Internal Server Error)
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class com.str.jersey.model.CrazyCat, and Java type class com.str.jersey.model.CrazyCat, and MIME media type application/json was not found
Казалось бы все на месте согласно документации. Решение было найдено на stackoverflow.
Добавить еще одну зависимость:
<dependency> <groupId>com.owlike</groupId> <artifactId>genson</artifactId> <version>0.98</version> </dependency>
Итого:
Проект с сервисом возвращим json объект. |
На этот раз запуск успешен:
Ура, готово. |
Netbeans 7.4
Glassfish 3.1.2
Maven наше всё :)
Бессменная документация Jersey.
SVN с исходниками получившегося.
Stackoverflow о спобобах деплоя JAX-RS.
0 comments:
Отправить комментарий