Как вернуть LocalDateTime из конечной точки FeignClient? - PullRequest
0 голосов
/ 27 февраля 2020

Это мой 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')

У меня есть конвертер LocalDateTime в моем классе SpringMvcConfig и контракт в моем классе FeignConfig. Кто-нибудь может помочь - что мне не хватает?

1 Ответ

0 голосов
/ 27 февраля 2020

Spring MVC с использованием десериализации сделает массив. Но Feign вызывает метод объекта с ArrayList. Таким образом, вы не можете десериализовать LocalDate.

Таким образом, вы можете добавить этот параметр в pom. xml

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

И добавить это для десериализации модели. (com.faster xml .jackson.datatype.jsr310.JavaTimeModule, com.faster xml .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;
}

wi sh может помочь вам.

...