无法将类型“ java.lang.String”的值转换为所需的类型“ java.util.Date”

时间:2019-04-02 14:41:11

标签: java spring-boot netflix-feign

我有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.DateTimeFormat类型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 个答案:

答案 0 :(得分:1)

根据问题Feign client doesn't serialize java.time.LocalDate's correctly #104,虚假客户端不支持@DateTimeFormat注释。 @DateTimeFormat注释由Spring MVC使用,而不由Spring Cloud OpenFeign使用。

几乎没有办法修复例如force ISO dates for all Feign callsregister additional Spring converters。它将需要取决于您的用例的自定义代码,例如您可能想用Date替换旧的ZonedDateTime