Не удалось преобразовать String @RequestParam в javasql .Timestamp - PullRequest
1 голос
/ 08 мая 2020

У меня есть модульный тест, который проверяет запрос на получение с параметром TimeStamp.

UT имитирует запрос с текущим TimeStemp в String.

Timestamp myTimeStamp = new Timestamp(Calendar.getInstance().getTimeInMillis());

MockHttpServletRequestBuilder request =get(REST_PATH).param("horarioFim", mytimeStamp.toString());

В моем контроллере у меня есть

    @RequestMapping(method = GET)
    public Iterable<AuditVersionModel> search(@RequestParam(required = false) Timestamp horarioFim)

TimeStamp импортируется из java. sql .TimeStamp

Тест не пройден, и у меня есть эта информация.

MockHttpServletResponse:
           Status = 500
    Error message = null
          Headers = {Content-Type=[application/json;charset=UTF-8]}
     Content type = application/json;charset=UTF-8
             Body = {"timestamp":"2020-05-07T23:58:48.298+0000","status":999,"error":"None","message":"Failed to convert value of type 'java.lang.String' to required type 'java.sql.Timestamp'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.web.bind.annotation.RequestParam @org.springframework.format.annotation.DateTimeFormat java.sql.Timestamp] for value '2020-05-07 20:58:48.201'; nested exception is java.lang.IllegalArgumentException: Invalid format: \"2020-05-07 20:58:48.201\" is malformed at \" 20:58:48.201\""}
    Forwarded URL = null
   Redirected URL = null
          Cookies = []

Я безуспешно пытался использовать @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) и другие варианты, это всегда одна и та же ошибка.

OBS1: Этот проект представляет собой миграцию со Spring Boot 1.5 на 2.0, код упрощен. OBS2: это устаревшая система, на данный момент проверка - единственный способ проверить запрос.

1 Ответ

0 голосов
/ 17 мая 2020

Предполагая, что используемый вами фреймворк десериализации ожидает, что формат даты будет в формате ISO, дата передается не в формате ISO. Я попытался передать «2020-05-07T23: 58: 48.298 + 0000» в OffsetDateTime.parse () API, и это вызвало исключение.

...