如何从 FeignClient 端点返回 LocalDateTime?

Posted

技术标签:

【中文标题】如何从 FeignClient 端点返回 LocalDateTime?【英文标题】:How to return LocalDateTime from FeignClient endpoint? 【发布时间】:2020-06-11 06:33:44 【问题描述】:

这是我的 FeignClient:

@FeignClient(name="$mongo.service.id", url="$mongo.service.url", configuration = FeignConfig.class)
public interface MongoAtmResetDataInterface 
    String requestMappingPrefix = "/api/atmResetData";

    @GetMapping(path = requestMappingPrefix + "/brinksDateTime")
    LocalDateTime fetchLastBrinksDateTime();

这是对 feign 端点的调用:

private String fetchLastBrinksTime() 
    return mongoAtmResetDataInterface.fetchLastBrinksDateTime()
       .toLocalDate()
       .format(DateTimeFormatter.ofPattern(DATE_FORMAT));

我得到以下异常:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 
Cannot construct instance of `java.time.LocalDateTime` (no Creators, like default construct, exist): 
no String-argument constructor/factory method to deserialize from String value ('10-12-2019T14:01:39')

我的 SpringMvcConfig 类中有一个 LocalDateTime 转换器,我的 FeignConfig 类中有一个合同。 谁能帮忙——我错过了什么?

【问题讨论】:

这能回答你的问题吗? JSON parse error: Can not construct instance of java.time.LocalDate: no String-argument constructor/factory method to deserialize from String value 我已经在我的 MvcConfigurer 中保存了转换器,很遗憾没有回答:( 【参考方案1】:

使用反序列化的 Spring MVC 将生成一个数组。但是 Feign 用 ArrayList 调用对象方法。所以你不能反序列化 LocalDate。

所以你可以在 pom.xml 中添加这个设置

<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>

并将其添加到反序列化模型。 (com.fasterxml.jackson.datatype.jsr310.JavaTimeModule, com.fasterxml.jackson.datatype.jsr310.JSR310Module)

@Bean
public ObjectMapper serializingObjectMapper() 
    ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
    objectMapper.registerModule(new JavaTimeModule());
    return objectMapper;

希望能帮到你。

【讨论】:

谢谢,但我试过了,我仍然得到完全相同的异常 可能是因为这是指序列化,而我的问题在于反序列化? 尝试另一种方式? ***.com/questions/40327970/… 此解决方案适用于 LocalDateTime 是您响应的一部分时,在我的情况下它是响应.. 仍在寻找解决方案

以上是关于如何从 FeignClient 端点返回 LocalDateTime?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Feign Client 返回空嵌套对象

微服务设计指导-feignclient的compression参数导致报文返回为gzip格式带来的坑

如何使用 webflux 端点从 React 生成 json 流

如何删除 asmx 端点?

FeignClient 超时如何解决

关于feign client触发熔断的异常