Несоответствие значения даты между сервером REST и почтальоном - PullRequest
0 голосов
/ 11 июля 2019

Я занимаюсь разработкой REST-сервера с использованием Spring Framework.

Я возвращаю список объекта Model (сотрудник, который содержит поле Date

Итак, мой класс Model выглядит следующим образом:

Class Employee {
 private String empId;
 private Date joinDate;
}

Мой метод контроллера выглядит так:

@GetMapping("/Employee")
    public List<EmployeeLeaves> searchEmployeeLeaveDetails(@RequestParam(value = "filter", required = false) String filter) throws Exception {

        List<Employee> empList = service.searchEmployee(filter);

        return empList;
    }

Когда я пытался вызвать этот API от почтальона, он всегда показывает, что joinDate на 1 день меньше реальной даты.

Я отладил эту проблему и обнаружил, что в контроллере дата является правильным значением

Ниже приведены результаты тестирования / отладки

Value for joinDate(Column type is Date) in Database: '2018-10-27'
Value for joinDate(java.sql.timestamp) in Controller: 2018-10-27 00:00:00.0
Value retried in postman's JSON response : "2018-10-26T18:30:00.000+0000"

У кого-нибудь есть идея, почему в ответе почтальона дата указана как 26 вместо 27? Любой фактор, связанный с часовым поясом, оказался между?

1 Ответ

1 голос
/ 11 июля 2019

Вы должны избегать , используя Date, так как теперь это унаследованный класс . Java 8 представила новый API для дат, времени, моментов и длительностей на основе календарной системы ISO.

Ближайшим эквивалентом Date является Instant, который представляет временную метку, момент на временной шкале в UTC. Но вы, вероятно, захотите использовать OffsetDateTime вместо этого, поскольку в нем хранятся все поля даты и времени, а также смещение от UTC / Гринвич.

Цитирование документации OffsetDateTime класса:

Предполагается, что ZonedDateTime или Instant используется для моделирования данных в более простых приложениях. Этот класс [OffsetDateTime] может использоваться при более подробном моделировании концепций даты и времени, либо при обмене данными с базой данных или в сетевом протоколе.

...