这是我的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();
}


这是对伪装端点的调用:

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类中确实有一个合同。
谁能帮忙-我想念什么?

最佳答案

使用反序列化的Spring MVC将创建一个Array。但是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;
}


希望可以帮助你。

09-28 11:48