Проблема в том, что по умолчанию Джексон не знает, как правильно сериализовать структуры дат Java 8 ( JSR 310 ) в JSON.В результате он возвращает всю структуру объекта, содержащую dayOfMonth
, dayOfWeek
, ..., как вы заметили.
Решением было бы сериализовать ваши даты в хорошо известный формат, такой как ISO-8601 строка.Для этого сначала необходимо добавить поддержку этих типов Java 8, добавив следующую зависимость:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
После этого вы должны заметить, что ваша дата сериализуется в виде массива, например:
[2019, 2, 8, 11, 0, 0, 0, 0]
Это массив, содержащий год, месяц, месяц и т. Д.Однако фильтр даты AngularJS пока не может использовать эти результаты.Правильным решением было бы отформатировать их как строку ISO-8601 без часового пояса (учитывая, что это LocalDateTime
).Вы можете сделать это, отключив функцию сериализации WRITE_DATES_AS_TIMESTAMPS
в Джексоне, настроив следующее свойство в application.properties :
spring.jackson.serialization.write-dates-as-timestamps=false
Теперь ваша дата будет отформатирована в виде строки, дляпример:
"2019-02-08T11:00:00.000"
Если вы посмотрите документацию фильтра даты AngularJS, вы увидите, что это правильно поддерживается:
Датаотформатировать как объект Date, миллисекунды (строка или число) или различные строковые форматы даты и времени ISO 8601 (например, yyyy-MM-ddTHH: mm: ss.sssZ и его более короткие версии, например yyyy-MM-ddTHH:mmZ, yyyy-MM-dd или yyyyMMddTHHmmssZ).
Имейте в виду, поскольку вы используете LocalDateTime
, информация о часовом поясе не предоставляется, и, таким образом, фильтр даты AngularJS считает это локальным временем браузера, как упомянуто в той же документации:
Если часовой пояс не указан в строке ввода, считается, что время находится в местном часовом поясе.
Это означает, что если часовой пояс сервера отличается отв часовом поясе браузера, будут проблемы с данным временем.