Использовать метод restful из URL с помощью параметра Date Param Java

У меня есть успокаивающий метод веб-службы, такой как этот:

@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)
public String generateInfo(
        @QueryParam("a") String a,
        @QueryParam("b") String b, 
        @QueryParam("date") Date date) {
    // ...business code...
    return "hello world";
}

Как я могу вызвать этот метод из WebBrowser?, Проблема заключается в параметре Date который, когда я пытаюсь дать мне 404 не найден или 500 внутренних ошибок сервера.

Ответ 1

Я бы предложил принять дату как String и самостоятельно разобрать ее. Вот так:

@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)
public String generateInfo(
        @QueryParam("a") String a,
        @QueryParam("b") String b, 
        @QueryParam("date") String date) {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date dateObj = sdf.parse(date);

    return "hello world";
}

Способ сделать этот запрос через браузер:

http://localhost/your_service/generateInfo?date=2013-02-14

Что нужно учитывать при оформлении дат:

  • SimpleDateFormat очень гибкий при разборе различных форматов дат. Стандарт ISO для строк даты: yyyy-MM-dd

  • API дат Joda Java принят как более полная реализация даты/времени, а некоторые считают, что он более оптимизирован, чем API родной даты Java, особенно для парсинга дат.

  • часто лучше указывать даты как временные метки времени, особенно если ваше приложение работает в разных часовых поясах. Тем не менее, вы должны знать о проблемах кеширования HTTP при принятии отметки времени эпохи (например, если ваши клиенты не усекают временные метки эпохи, тогда вы получите много промахов в кеше). Я хотел бы вернуться к ISO-8601, поскольку отформатированные даты проще для HTTP-кеша.

Ответ 2

Это зависит от формата даты в URL-адресе. Согласно этому вопросу, любой формат, который может обрабатывать конструктор Date(String) должен работать. Если формат даты отличается, и вы не можете его изменить, вам придется пойти с решением pestrella и получить дату в виде строки и преобразовать ее самостоятельно.

Ответ 3

@GET
@Path("/generateInfo")
@Produces(MediaType.APPLICATION_JSON)

public String generateInfo(
 @QueryParam("a") String a,   
 @QueryParam("b") String b, 
 @QueryParam("date") String str_date) {

 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");

 Date date = df.parse(str_date);
 return "hello world";
}