我有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 \”“
答案 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 calls或register additional Spring converters。它将需要取决于您的用例的自定义代码,例如您可能想用Date
替换旧的ZonedDateTime
。