2015-09-10 1 views
4

Я создаю конечную точку, которая будет получать даты для некоторой фильтрации на стороне сервера. Код выглядит следующим образом:Использование Spring @RestController для обработки HTTP GET с параметрами ZonedDateTime

@RequestMapping(
     value = "/test", 
     method = RequestMethod.GET, 
     produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE} 
) 
@ResponseStatus(HttpStatus.OK) 
public TestSummaryModel getTestSummaryByDate(
     @RequestParam ZonedDateTime start, 
     @RequestParam ZonedDateTime end) { 

    return testService.getTestBetween(start, end); 

} 

Когда я пытаюсь вызвать мою конечную точку, я получаю ошибку HTTP 400 «запрос, отправленный клиентом синтаксически неправильно.»

Я пробовал разные форматы даты, но ни один из них не работал. Я что-то упускаю? Я читал о @DateTimeFormat, но, хотя я добавил его, не работал.

@RequestParam @DateTimeFormat(pattern = "dd-MM-yyyy") ZonedDateTime start 

Это пример запроса я делаю:

http://host/test-api/v1/test-summary/test?start=09-09-2015&end=09-09-2015

Спасибо!

ответ

5

@DateTimeFormat - это то, что вам нужно. Весна MVC 4 имеет соответствующие преобразователи для ZonedDateTime.

Однако вам необходимо предоставить соответствующий шаблон и отправить соответствующее значение.

Информация, предоставленная в формате даты dd-MM-yyyy, недостаточна для производства ZonedDateTime.

Попробуйте

@RequestParam("start") @DateTimeFormat(iso = ISO.DATE_TIME) ZonedDateTime start 

и отправить

...?start=2014-04-23T04:30:45.123Z 

В качестве альтернативы, используйте тип даты, которая не нуждается зоны или информацию о времени и предоставить соответствующий формат даты @DateTimeFormat.

+1

Спасибо! проблема заключалась в том, что я смешивал форматы и тип даты. Поскольку вы предлагаете изменить параметр DateTime, поскольку это единственное, что мне нужно. –