У меня есть модель 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()));