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:
Отправить комментарий