2016-05-09 2 views
2

У меня есть этот контроллер, который я пытаюсь проверить с помощью mockMVCDateTimeFormat ISO & Spring MVC

@RequestMapping(value = "/something/{language}", method = RequestMethod.GET, produces = { "application/json", "application/xml" }) 
    public ResponseEntity<someEntity> getInfo( 
      @PathVariable String language, 
      @DateTimeFormat(iso= DateTimeFormat.ISO.DATE_TIME) @RequestParam(required = false) Date fromDate 
    ) 

Так что я ожидаю, чтобы форматы дат, как в Документах могли быть интерпретированы: DATE_TIME Наиболее распространенным ISO DateTime Формат yyyy-MM-dd'T'HH: mm: ss.SSSZ, например

Однако я продолжаю получать такие вещи, как это:

выполнение обработчика в результате исключения: Не удалось преобразовать значение типа «» java.lang.String для требуемого типа «java.util.Date»; вложенное исключение

org.springframework.core.convert.ConversionFailedException: 
Failed to conv ert from type java.lang.String to type 
@org.springframework.format.annotation.DateTimeFormat 
@org.springframework.web.bind.annotation.RequestParam java.util.Date for value '2015-09-26T01:30:00.000Z'; nested exception is 
java.lang.IllegalArgumentException: Unable to parse '2015-09-26T01:30:00.000Z' 

Насколько я вижу, я не делаю ничего плохого, что должно быть, конечно. Может ли кто-нибудь просветить, что мое плохое? Я не думаю, что мне нужно опубликовать больше кода, поскольку исключение показывает правильное значение, которое я передаю API правильно?

+0

Я верю, что проблема связана с последним символом 'Z', поскольку он представляет собой зону в синтаксическом анализе времени даты. – Sanjeev

+0

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

+0

Ваша дата строка времени неверна в соответствии с ISO.DATE_TIME Формат должен быть «2015-09-26T01: 30: 00.000 <фактическое значение часового пояса>» вместо '2015-09-26T01: 30: 00.000Z' для ex. '2015-09-26T01: 30: 00.000-04: 00' – Sanjeev

ответ

0

В соответствии с DateTimeFormat.ISO.DATE_TIME

Наиболее распространенным ISO DateTime Формат YYYY-MM-dd'T'HH: мм: ss.SSSZ, например, 2000-10-31 01: 30: 00.000-05: 00.

Где Z представляет значение часового пояса, например -05: 00.

Ваше строковое значение, которое невозможно просмотреть, равно 2015-09-26T01:30:00.000Z, где Z необходимо заменить фактическим значением часового пояса.

Например 2015-09-26T01:30:00.000-04:00 будут разобраны ISO.DATE_TIME правильно

0

Попробуйте не передать параметр fromDate как String.

У меня была такая же проблема, и когда я развернул значение параметра из двойных кавычек (") в вызове API (я использовал Postman), он сработал. Возможно, вам придется кодировать некоторые символы (то есть +).

Смежные вопросы