Рубрики
Без рубрики

Форматирование дат JSON в весенней загрузке

Изучите несколько различных способов форматирования дат JSON в приложении Spring Boot.

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы покажем, как форматировать поля даты JSON в приложении Spring Boot.

Мы рассмотрим различные способы форматирования дат с помощью Jackson , который используется Spring Boot в качестве процессора JSON по умолчанию.

2.Использование @JsonFormat в поле даты

2.1. Настройка формата

Мы можем использовать @JsonFormat аннотация для форматирования определенного поля :

public class Contact {

    // other fields

    @JsonFormat(pattern="yyyy-MM-dd")
    private LocalDate birthday;
     
    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private LocalDateTime lastUpdate;

    // standard getters and setters

}

В поле день рождения мы используем шаблон, который отображает только дату, в то время как в поле LastUpdate мы также включаем время.

Мы использовали типы дат Java 8 , которые очень удобны для работы с временными типами. Конечно, если нам нужно использовать устаревшие типы, такие как java.util.Дата, мы можем использовать аннотацию таким же образом:

public class ContactWithJavaUtilDate {

     // other fields

     @JsonFormat(pattern="yyyy-MM-dd")
     private Date birthday;
     
     @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
     private Date lastUpdate;

     // standard getters and setters
}

Наконец, давайте взглянем на выходные данные, отображаемые с помощью @JsonFormat с заданным форматом даты:

{
    "birthday": "2019-02-03",
    "lastUpdate": "2019-02-03 10:08:02"
}

Как мы видим, используя @JsonFormat аннотация – отличный способ отформатировать конкретное поле даты.

Однако мы должны использовать его только тогда, когда нам нужно конкретное форматирование полей. Если мы хотим иметь общий формат для всех дат в нашем приложении, есть лучший способ добиться этого, как мы увидим позже.

2.2. Установка часового пояса

Кроме того, если нам нужно использовать определенный часовой пояс, мы можем установить атрибут часовой пояс @ JsonFormat:

@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss", timezone="Europe/Zagreb")
private LocalDateTime lastUpdate;

Нам не нужно использовать его, если тип уже содержит часовой пояс, например, с java.time.ZonedDateTime.

3. Настройка формата по умолчанию

И хотя @JsonFormat сам по себе является мощным, жесткое кодирование формата и часового пояса может укусить нас в будущем.

Если мы хотим настроить формат по умолчанию для всех дат в нашем приложении, более гибкий способ-настроить его в application.properties :

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

И если мы хотим использовать определенный часовой пояс в наших датах JSON, для этого также есть свойство:

spring.jackson.time-zone=Europe/Zagreb

Хотя установка формата по умолчанию, подобного этому, довольно удобна и проста, у этого подхода есть недостаток. К сожалению, он не работает с типами даты Java 8 , такими как LocalDate и LocalDateTime – мы можем использовать его только для форматирования полей типа java.util.Дата или java.util.Календарь . Однако, как мы скоро увидим, надежда есть.

4. Настройка ObjectMapper Джексона

Итак, если мы хотим использовать типы дат Java 8 и установить формат даты по умолчанию, то нам нужно посмотреть на создание Jackson2ObjectMapperBuilderCustomizer bean:

@Configuration
public class ContactAppConfig {

    private static final String dateFormat = "yyyy-MM-dd";
    private static final String dateTimeFormat = "yyyy-MM-dd HH:mm:ss";

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
        return builder -> {
            builder.simpleDateFormat(dateTimeFormat);
            builder.serializers(new LocalDateSerializer(DateTimeFormatter.ofPattern(dateFormat)));
            builder.serializers(new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(dateTimeFormat)));
        };
    }

}

В приведенном выше примере показано, как настроить формат по умолчанию в нашем приложении. Мы должны определить компонент и переопределить его метод customize , чтобы установить нужный формат.

Хотя этот подход может показаться немного громоздким, самое приятное в нем то, что он работает как для Java 8, так и для устаревших типов дат.

5. Заключение

В этой статье мы рассмотрели несколько различных способов форматирования дат JSON в приложении Spring Boot.

Как всегда, мы можем найти исходный код для примеров на GitHub .