Разработчики Java, ищущие быстрый и безболезненный способ создания готовых к работе веб-сервисов RESTful JSON HTTP, должны рассмотреть среду Dropwizard . Dropwizard объединяет хорошо зарекомендовавшие себя библиотеки, которые дополняют друг друга, чтобы вы могли понять, что важно: написание и предоставление рабочего кода. Для тех, кто интересуется подробностями об используемых библиотеках, обратитесь к обзору Dropwizard . К счастью, Dropwizard не заставляет вас иметь дело со всеми его отдельными компонентами. Вы сможете сосредоточиться на своей работе под рукой. Если у вас есть время, останьтесь вокруг и давайте что-нибудь сделаем с Dropwizard.
Весь код для этого урока доступен на GitHub .
Как начать работу с Dropwizard?
Одна зависимость Maven, Gradle или Ivy предоставит вам все компоненты, необходимые для создания веб-сервисов Dropwizard.
1
2
3
4
5
|
<dependency> <groupId>com.yammer.dropwizard</groupId> <artifactId>dropwizard-core</artifactId> <version> 0.6 . 2 </version> </dependency> |
Примечание . Пожалуйста, обратитесь к превосходной документации Dropwizard, если вы столкнетесь с чем-то, что, по вашему мнению, недостаточно объяснено в этой короткой публикации.
Что мы будем делать?
Давайте создадим веб-сервис, который возвращает текущую дату и время для данного часового пояса. Мы будем использовать настраиваемый часовой пояс по умолчанию, если клиент решит не указывать его.
конфигурация
Наш супер-простой файл конфигурации time-service.yml
будет выглядеть следующим образом.
1
|
defaultTimezone: UTC |
За кулисами Dropwizard загрузит, проанализирует, проверит и превратит эту конфигурацию в объект. Все, что нам нужно сделать, это указать его как класс.
1
2
3
4
5
6
7
|
public class TimezoneConfiguration extends Configuration { @NotEmpty @JsonProperty private String defaultTimezone; public String getDefaultTimezone() { return defaultTimezone; } } |
Сервисный выход
Допустим, мы хотим, чтобы выходные данные нашего веб-сервиса выглядели так.
1
|
{ "time" : "2014-02-04 13:45:02" } |
Соответствующий класс прост.
1
2
3
4
5
6
7
8
9
|
public class Time { private final String time; public Time(String time) { this .time = time; } public String getTime() { return time; } } |
Ресурс
Затем мы решаем, что мы хотим, чтобы URL-путь для нашего веб-сервиса был /time
. И нам нужно указать, что ресурс вернет JSON. Соединение их вместе дает нам это.
1
2
3
4
|
@Path ( "/time" ) @Produces (MediaType.APPLICATION_JSON) public class TimeResource { } |
Единственное действие RESTful, которое имеет смысл сейчас для нашего демонстрационного веб-сервиса, — это GET
, поэтому давайте создадим для этого метод. При использовании нашего веб-сервиса клиент может предоставить часовой пояс в качестве параметра строки запроса.
1
2
3
|
@GET public Time getTime( @QueryParam ( "timezone" ) String timezone) { } |
Это оставляет нам еще три дела:
- обрабатывать данный часовой пояс от клиента
- заменить часовой пояс по умолчанию, если он не указан
- отформатировать текущую дату и время с часовым поясом
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
@Path ( "/time" ) @Produces (MediaType.APPLICATION_JSON) public class TimeResource { private final String defaultTimezone; public TimeResource(String defaultTimezone) { this .defaultTimezone = defaultTimezone; } @GET public Time getTime( @QueryParam ( "timezone" ) Optional timezone) { DateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); TimeZone timeZone = TimeZone.getTimeZone(timezone.or(defaultTimezone)); formatter.setTimeZone(timeZone); String formatted = formatter.format( new Date()); return new Time(formatted); } } |
обслуживание
Теперь давайте соберем вместе все части нашего веб-сервиса в нашем начальном классе, который мы будем называть TimeService
. Здесь мы будем использовать нашу TimezoneConfiguration
чтобы передать часовой TimezoneConfiguration
по умолчанию TimeResource
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
public class TimeService extends Service { public static void main(String[] args) throws Exception { new TimeService().run(args); } @Override public void run(TimezoneConfiguration config, Environment environment) { String defaultTimezone = config.getDefaultTimezone(); TimeResource timeResource = new TimeResource(defaultTimezone); environment.addResource(timeResource); } @Override public void initialize(Bootstrap timezoneConfigurationBootstrap) { } } |
Карандаши вниз
Это оно! Мы только что написали основанный на Dropwizard веб-сервис без утомительного шаблона или кучек тупой конфигурации XML.
Бег
Запустить ваш веб-сервис так же просто, как запустить приложение Java из командной строки — не нужно беспокоиться о файлах .war или контейнерах сервлетов.
1
|
java -cp libraries/* name.christianson.mike.TimeService server time-service.yml |
Теперь наведите свой веб-браузер или сверните на http://localhost:8080/time?timezone=MST
и получайте удовольствие!
- Весь код для этого урока доступен на GitHub .
Ссылка: | Dropwizard: безболезненные веб-сервисы RESTful JSON HTTP от нашего партнера по JCG Майка Кристиансона в блоге CodeAwesome . |