Преобразование формата даты в JSON с использованием Jackson

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

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

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

Для управления сериализацией полей типа Date в Jackson, вы можете установить необходимый формат даты в JSON. Для этого служит аннотация @JsonFormat с атрибутом pattern в вашей модели данных.

Пример:

Java
Скопировать код
public class Event {
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date eventDate;
    // геттеры и сеттеры
}

С применением данного приёма Jackson отформатирует даты в JSON-выводе в формате "yyyy-MM-dd HH:mm:ss".

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

Специфика работы с часовыми поясами

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

Java
Скопировать код
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "EST")
private Date eventTime;

Пользовательская сериализация/десериализация

Для более сложного форматирования дат можно воспользоваться собственными сериализаторами и десериализаторами. С их помощью вы полностью контролируете обработку дат.

Java
Скопировать код
public class CustomDateSerializer extends StdSerializer<Date> {
    private static final SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm a z");

    public CustomDateSerializer() {
        this(null);
    }

    public CustomDateSerializer(Class<Date> t) {
        super(t);
    }

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

Совет: Связать сериализатор с полем можно с помощью аннотации @JsonSerialize:

Java
Скопировать код
@JsonSerialize(using = CustomDateSerializer.class)
private Date eventDate;

Экспертный совет: Соответствующий JsonDeserializer будет полезен при десериализации:

Java
Скопировать код
public class CustomDateDeserializer extends StdDeserializer<Date> {
    public CustomDateDeserializer() {
        this(null);
    }

    public CustomDateDeserializer(Class<?> vc) {
        super(vc);
    }

    @Override
    public Date deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException {
        String date = jsonParser.getText();
        try {
            return new SimpleDateFormat("yyyy-MM-dd HH:mm a z").parse(date);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
    }
}

Для активации десериализатора используйте @JsonDeserialize:

Java
Скопировать код
@JsonDeserialize(using = CustomDateDeserializer.class)
private Date eventDate;

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

Единый формат дат можно задать глобально с использованием ObjectMapper:

Java
Скопировать код
ObjectMapper mapper = new ObjectMapper();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
mapper.setDateFormat(sdf);

Теперь этот формат станет стандартом для всех операций сериализации и десериализации типа Date.

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

Представим пользовательское форматирование дат с Jackson как путешествие во времени:

Markdown
Скопировать код
🕒 Путешествие Во Времени 🕒
| Настоящее (Входные данные) | Машина Времени (Аннотация)            | Будущее (Вывод JSON)   |
| --------------------------- | ------------------------------------ | --------------------- |
| 2023-04-12T08:30           | @JsonFormat(pattern="dd/MM/yyyy HH:mm:ss") | "12/04/2023 08:30:00" |

Настройки Машины Времени (аннотация) действуют как флюкс-конденсатор, помогая преобразовать настоящее в будущее.

В Java:

Java
Скопировать код
@JsonFormat(pattern="dd/MM/yyyy HH:mm:ss")
private Date startTime;

В JSON:

json
Скопировать код
{ "startTime": "12/04/2023 08:30:00" }

Используя Jackson, вы становитесь не просто разработчиком, а повелителем времени!

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

  1. Полное руководство по аннотации @JsonFormat в Jackson – подробный обзор возможностей Jackson с применением @JsonFormat.
  2. Создание пользовательских сериализаторов в Jackson – детальное руководство, как стать магом дат, с применением пользовательской сериализации.
  3. Работаем с датами в Jackson ObjectMapper – основные концепции работы с датами в ObjectMapper.
  4. Аннотации Jackson для форматирования даты и времени – описание всех аннотаций, применяемых для форматирования даты и времени в Jackson.
  5. Форматирование JSON-дат в Spring Boot с помощью Jackson – интеграция Jackson в Spring Boot для форматирования дат.
  6. Обсуждение формата дат Jackson на Stack Overflow – обмен опытом, примеры и решения по теме.