Значение даты загрузки Java Spring изменилось после анализаJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Значение даты загрузки Java Spring изменилось после анализа

Сообщение Anonymous »


Я пытаюсь создать REST API с помощью Java Spring Boot и в настоящее время пишу для него тестовые примеры JUnit.

Похоже, что для объекта, содержащего экземпляр java.sql.Date, после сохранения его в базе данных и ответа возвращаемым значением save(), значение даты уже не то же самое.

После двойной проверки я действительно везде использую java.sql.Date, а не java.util.Date.

Я использую PostgreSQL и Hibernate для управления базами данных.

Вот проблемный код:

Бронирование созданоBooking = новое бронирование( новая дата(System.currentTimeMillis()), ..., // остальные аргументы для обсуждения не важны ); ResponseEntity ответ = client.postForEntity( "/createBooking", BookingDto.toDTO(createBooking), BookingDto.class); AssertEquals(HttpStatus.CREATED, response.getStatusCode()); AssertNotNull(response.getBody()); AssertEquals(createdBooking.getCheckInDate(), response.getBody().getCheckInDate()); Вот реализация контроллера:

@PostMapping(value = { "/createBooking", "/createBooking/" }) @ResponseStatus(HttpStatus.CREATED) public BookingDto createBooking(@RequestBody BookingDto bookingDto) { Бронирование бронирования = bookingService.createBooking(bookingDto); return BookingDto.toDTO(бронирование); } Вот упрощенная реализация сервиса:

public Booking createBooking(BookingDto bookingDto) { Бронирование бронирования = новое бронирование(); booking.setCheckInDate(bookingDto.getCheckInDate()); // остальные аргументы не важны для обсуждения вернуть бронированиеRepository.save(бронирование); } Что касается класса Booking, конструктор по умолчанию пуст.

Утверждение не выполняет проверку равенства дат. Результат:

Ожидается: 06.11.2023 Актуально: 04.11.2023. 2023-11-06 — это фактическое время по Гринвичу и местному времени, когда я запускаю тест, 2023-11-04 Я не знаю почему. Я просмотрел несколько сообщений об использовании SimpleDateFormat, например, этот, но я считаю, что мой случай немного отличается, потому что мое значение даты буквально «изменилось» после прогона базы данных .

Мне нужна помощь, чтобы объяснить, почему происходит такое поведение и как я могу убедиться, что значения дат будут согласованными. Заранее спасибо.

РЕДАКТИРОВАНИЕ 1:

Проект был инициализирован с помощью Spring Initializr с Spring Boot 3.1.4 и Java 17, которые совместимы с моей системой.

Чтение/запись в базу данных обрабатывается BookingRepository, который расширяет CrudRepository и, таким образом, внедряется Spring:

публичный интерфейс BookingRepository расширяет CrudRepository { ... И я не определил никакого явного преобразования или синхронизации помимо свойств приложения:

spring.datasource.driver-class-name=org.postgresql.Driver Spring.jpa.hibernate.ddl-auto=создать-дроп Spring.datasource.url=jdbc:postgresql://localhost:5432/hotel_management Spring.datasource.username={опущено} Spring.datasource.password={опущено} РЕДАКТИРОВАНИЕ 2:

Покопавшись дальше, я обнаружил, что проблема связана с преобразованием даты, поскольку экземпляр java.sql.Date на стороне клиента анализируется до последнего значения времени по Гринвичу в 12:00. :00 утра, но сторона сервера получает то же значение, но принимает его как значение местного времени в своем экземпляре java.sql.Date, который отличается на 5 часов. После округления дата будет сдвинута на один день. Тот же процесс происходит и наоборот.

Все еще пытаюсь выяснить, как решить эту проблему, продолжая использовать java.sql.Date, поскольку переключение на другие типы данных в моем случае не очень вариант.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»