Не удалось преобразовать значение типа «java.lang.String» в требуемый тип «java.util.Date» - PullRequest
2 голосов
/ 02 апреля 2019

У меня есть 2 микросервиса, которые общаются через симуляцию. Один микросервис предоставляет метод, который вызывает другой. Метод принимает в качестве аргумента дату.

Это код метода:

@Override
public String verifyWorkingDaysByAccesstimeAndAttendanceDate(@PathVariable int accessTimeId,
        @PathVariable("attendanceDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Date attendanceDate) {

    AccessTime accessTime = accessTimeService.findByIDService(AccessTime.class, accessTimeId);

    String day = new SimpleDateFormat("EEEE", Locale.ENGLISH).format(attendanceDate).toUpperCase();
    String status = "NOT_VERIFIED";

    if (workingDayservice.findWorkingDaysByAccesstimeAndDate(accessTime, attendanceDate).toString().contains(day)) {
        status = "VERIFIED";
    }

    return status;

}

==> как вы можете видеть, он принимает дату и проверяет ее наличие в базе данных.

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

@FeignClient(name = "access-control-micro-services-access-time")
public interface AccessTimeClient {

@RequestMapping(value = "/api/v${webService.currentVersion}/workingDay/accessTime/{accessTimeId}/{attendanceDate}", method = RequestMethod.GET)
String verifyWorkingDaysByAccesstimeAndAttendanceDate(@PathVariable("accessTimeId") int accessTimeId,
        @PathVariable("attendanceDate") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Date attendanceDate);

==> второй микросервис вызывает этот метод в другом классе и сообщает ему дату, когда он получает данные из базы данных (формат: 2019-03-29 08:38:08)

Мой код запускает это исключение:

Не удалось преобразовать значение типа 'java.lang.String' в требуемый тип 'java.util.Date'; вложенным исключением является org.springframework.core.convert.ConversionFailedException: не удалось преобразовать тип [java.lang.String] в тип [@ org.springframework.web.bind.annotation.PathVariable @ org.springframework.format.annotation.Dateime java.util.Date] для значения '2019-03-29 08: 38: 08.0'; вложенное исключение - java.lang.IllegalArgumentException: неверный формат: \ "2019-03-29 08: 38: 08.0 \" искажен при \ "08: 38: 08.0 \" "

1 Ответ

1 голос
/ 02 апреля 2019

Клиент Feign не поддерживает аннотацию @DateTimeFormat в соответствии с проблемой Клиент Feign не сериализует java.time.LocalDate правильно # 104 . Аннотация @DateTimeFormat используется Spring MVC, а не Spring Cloud OpenFeign.

Есть несколько способов исправить, например, принудительная установка даты ISO для всех вызовов Feign или регистрация дополнительных преобразователей Spring . Это потребует пользовательского кода, который зависит от вашего варианта использования, например Вы можете заменить старый Date на ZonedDateTime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...