Как заставить метод запроса весенней загрузки принимать параметр даты в формате iso?

Я пытаюсь написать метод запроса контроллера, который принимает параметр даты, который отправляется в виде строки даты и времени в формате iso. Это выглядит например, вы можете указать формат вручную, аннотируя параметр метода с помощью @DateTimeFormat(pattern="yyyy-MM-dd"), но я хочу использовать настройку iso. т.е. @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME). Используя формат даты и времени ISO, я даже не могу заставить его проанализировать дату примера в документации. Мне интересно, если я делаю что-то неправильно.

Вот мой класс контроллера:

@RestController
public class DateController {

    @RequestMapping(path = "/echoIsoDate", method = RequestMethod.GET)
    public ResponseEntity<String> echoIsoDate(@RequestParam("date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Date date){
        return new ResponseEntity<>(date.toString(), HttpStatus.OK);
    }

    @RequestMapping(path = "/echoDumbDate", method = RequestMethod.GET)
    public ResponseEntity<String> echoDumbDate(@RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") Date date){
        return new ResponseEntity<>(date.toString(), HttpStatus.OK);
    }
}

Когда я пытаюсь вызвать этот контроллер с датой, которую я действительно хочу проанализировать, он не работает:

http://localhost:8080/echoIsoDate?date=2015-12-30T00:00:00.000Z

Когда я пытаюсь вызвать этот контроллер с датой примера из документации не работает:

http://localhost:8080/echoIsoDate?date=2000-10-31%2001:30:00.000-05:00

Второй метод контроллера работает. например, вызов http://localhost:8080/echoDumbDate?date=1970-01-01 возвращает Thu Jan 01 00:00:00 CST 1970 (но тогда он находится в CST, который предположительно находится в часовом поясе моей системы).

Вопросы:

  • Что я делаю не так в echoIsoDate()? Или есть ошибка в Spring?
  • Для echoDumbDate() есть ли способ указать часовой пояс, который я хочу, чтобы он всегда использовал UTC?

person David    schedule 03.08.2016    source источник


Ответы (1)


попробуйте это вместо

@RequestMapping(path = "/echoIsoDate", method = RequestMethod.GET)
public ResponseEntity<String> echoIsoDate(@RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") Date date){
    return new ResponseEntity<>(date.toString(), HttpStatus.OK);
}
person tashi    schedule 04.08.2016