Переопределение значений карты Джексона, сериализованных с использованием значений по умолчанию для LocalDate - PullRequest
0 голосов
/ 27 января 2020

У меня есть модель Response для моей веб-службы, где дата имеет тип LocalDate:

public class ResponseModel implements Serializable {
    private LocalDate processedDate;
    //other props
}   

В моем классе Controller я вызываю другую службу, используя RestTemplate и exchange().

@PostMapping(value = "/test", produces = APPLICATION_JSON_VALUE)
public List<ResponseModel> stats(@RequestBody final Request request) {
    final Map<LocalDate, Map<Status, Integer>> summaryCount = ...

    final List<ResponseModel> result = summaryCount.entrySet().stream()
                                                                          .map(entry -> {
                                                                              final Map<Status, Integer> value = entry.getValue();
                                                                              ResponseModel sm = new ResponseModel();
                                                                              sm.setProcessedDate(LocalDate.parse(entry.getKey()));
                                                                              return sm;
                                                                          }).collect(Collectors.toList());

    return result;
}

Я читал, что Джексон рассматривает Карты как JSON объекты по умолчанию. Он сериализует Map как объект, ключи которого являются его полями, поэтому он вызывает toString ()

ключа. Я ожидаю получить результат в summaryCount map с ключом в карте как LocalDate. Однако это возвращается как String, поэтому вызов sm.setProcessedDate(LocalDate.parse(entry.getKey())); завершается неудачно с:

java.lang.ClassCastException: java.lang.String cannot be cast to java.time.LocalDate

Как я могу получить ключ как LocalDate, что другой сервис возвращается?

В настоящее время я должен явно разобрать ключ к LocalDate:

sm.setProcessedDate(LocalDate.parse(entry.getKey().toString()));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...