Форматирование LocalDateTime в "yyyy-MM-dd" в Spring Boot

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

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

Для корректной сериализации LocalDateTime в Spring Boot необходимо добавить аннотацию @JsonFormat к соответствующим полям модели и задать нужный шаблон формата. Для формата "год-месяц-день час:минута:секунда" применяется шаблон @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss"). Для совместимости вашего кода с API для работы с датой и временем Java 8 убедитесь, что модуль jackson-datatype-jsr310 присутствует в classpath вашего проекта.

Java
Скопировать код
import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDateTime;

public class SampleModel {

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime dateTime;
    // ... геттеры и сеттеры ...
}

Добавьте указанную ниже зависимость в файл pom.xml:

xml
Скопировать код
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.9.0</version> <!-- Выберите версию, подходящую проекту -->
</dependency>

Для предотвращения преобразования ваших дат в массивы чисел, добавьте следующую строку в application.properties:

properties
Скопировать код
spring.jackson.serialization.write_dates_as_timestamps=false

Этот параметр гарантирует, что LocalDateTime в JSON-выводе будет представлен в корректном формате в Spring Boot 2.x без дополнительных настроек.

Кинга Идем в IT: пошаговый план для смены профессии

От нуля к герою: Продвинутая настройка

Глобальное задание форматов даты и времени

Если вам требуется единый формат даты и времени для всех полей LocalDateTime, можно настроить ObjectMapper в классе конфигурации:

Java
Скопировать код
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

@Configuration
public class JacksonConfig {

    @Bean
    public ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
        return builder
            .serializers(new LocalDateTimeSerializer())
            .deserializers(new LocalDateTimeDeserializer())
            .featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
            .build();
    }
}

Индивидуальная стратегия форматирования даты и времени

При необходимости индивидуальных сериализации и десериализации, вы можете реализовать LocalDateTimeSerializer и LocalDateTimeDeserializer.

Пример для сериализации:

Java
Скопировать код
public class CustomLocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
    private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    @Override
    public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeString(value.format(formatter));
    }
}

Пример для десериализации:

Java
Скопировать код
public class CustomLocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
    private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    @Override
    public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        return LocalDateTime.parse(p.getValueAsString(), formatter);
    }
}

Совместимость – залог гладкой разработки

Убедитесь в совместимости версии модуля jackson-datatype-jsr310 с вашей версией Spring Boot, чтобы избежать проблем при обновлениях Spring Boot.

Разрешение конфликтов аннотаций

Понимайте контексты применения аннотаций @JsonFormat и @DateTimeFormat. @DateTimeFormat удобна для привязки LocalDate в HTTP-запросах, в то время как @JsonFormat используется для JSON-сериализации и десериализации.

Визуализация

Вот так LocalDateTime из Java 8 преобразуется в JSON-формат в Spring Boot:

Markdown
Скопировать код
Java LocalDateTime (🚂) => Станция Spring Boot (🌐)

На этом пути вы будете использовать индивидуальные сериализаторы:

Java
Скопировать код
@JsonSerialize(using = LocalDateTimeSerializer.class)

И придёте к нужному формату:

json
Скопировать код
"departureTime": "2023-04-05T14:30:00"

Хорошее путешествие по долинам Spring Boot не может быть скучным.

Разгадка тайны сериализации

Если вы запутались в сериализации LocalDateTime, проверьте следующее:

  • Версию зависимости, чтобы быть в курсе обновлений.
  • Аннотации на предмет возможных конфликтов их использования.
  • ObjectMapper на правильность настройки и отсутствие активации WRITE_DATES_AS_TIMESTAMPS.

Мастерство надёжной конфигурации

Для стабильной и гибкой конфигурации следует:

  • Обновлять зависимости и версию Spring Boot.
  • Использовать глобальные настройки в application.properties или с помощью бина ObjectMapper.
  • Применять аннотации для специальных полей с учетом их основной функциональности.

Расширяйте свои горизонты обращения с датой и временем

Несколько советов по работе с LocalDateTime в Java 8 и Spring Boot:

  • Учитывайте часовые пояса.
  • Изучайте различные классы даты и времени вроде ZonedDateTime и OffsetDateTime.
  • Разрабатывайте с ориентацией на тестирование: пусть ваши интеграционные и модульные тесты проверяют форматирование даты и времени.

Полезные материалы

  1. Официальная документация Spring Boot – подробное руководство по работе с JSON в Spring Boot.
  2. Как сохранить LocalDate и LocalDateTime с JPA 2.1 – статья рассказывает о работе с JPA и Date-Time API Java 8.
  3. Stack Overflow: Настройка маппинга JSON используя Jackson для LocalDate – сообщество подтверждает решения по настройке сериализации LocalDate.