Это то, что я думаю сделать на сервере JEE Glassfish с использованием Jersey.
@GET
@Path("/{name}/{date}")
public String getMessages(@PathParam("name") String name, @PathParam("date") Date date)
Мне нравится идея о том, чтобы сказать людям, использующим этот веб-сервис RESTful, что «Дата здесь - это все, что работает с классом Date в Java». Это довольно просто с точки зрения того, что они могут просто взглянуть на спецификацию Date, и у них уже будет рабочая модель, с которой они смогут протестировать.
Проблема, о которой я беспокоюсь, состоит в том, что когда я делаю это, JAX-RS не очень хорош, когда Date () не нравится то, что он получает в конструкторе. Поскольку Date () выдает ошибку, если не может проанализировать то, что ему дано (например, если вы передаете ей строку «сегодня» вместо реальной даты), сервер JEE возвращает ошибку 404.
Это хорошая практика? Есть ли лучший способ сделать это, о котором я не думаю?
источник
DateTimeFormatter
. Для Java <= 7 я бы использовалThreadLocal
Кто будет использовать ваш сервис? Будут ли они искать спецификацию
Date
класса и выяснять, какие строки он будет анализировать? Я бы не стал, даже если бы я был программистом на Java, я бы знал, где искать ;-)Я думаю, что вы должны сначала сказать своим пользователям, как будут выглядеть ваши URI, например
а затем найдите способ, чтобы Джерси помог вам разобрать любой формат даты, который вы выбрали. Это может означать использование
Date
типа параметра и, возможно, указание регулярного выражения в@Path
аннотации, напримерили используя другой класс, способный анализировать дату в вашем формате. Обработка URI, которые не соответствуют спецификации, которую вы даете своим пользователям, - это еще одна вещь, которую вы должны решить, как обрабатывать независимо от любого из вышеперечисленных (вернуть ресурс по умолчанию? Вернуть ошибку 404?).
источник