1. Обзор
В этой статье мы попытаемся понять, как использовать @ JsonFormat в Джексоне. Это аннотация Джексона, которая используется для указания того, как форматировать поля и/или свойства для вывода в формате JSON. В частности, эта аннотация позволяет указать, как форматировать
В частности, эта аннотация позволяет указать, как форматировать значения Date и Calendar в соответствии с форматом SimpleDateFormat .
2. Maven Dependency
@ JsonFormat определяется в https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22com.fasterxml.jackson.core%22%20AND%20a%3A%22jackson-databind% 22[jackson-databind], поэтому нам нужна следующая зависимость Maven:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
3. Начиная
3.1. Использование формата по умолчанию
Для начала мы продемонстрируем принципы использования аннотации @ JsonFormat с классом, представляющим пользователя.
Поскольку мы пытаемся объяснить детали аннотации, объект User будет создан по запросу (а не сохранен или загружен из базы данных) и сериализован в JSON:
public class User {
private String firstName;
private String lastName;
private Date createdDate = new Date();
//standard constructor, setters and getters
}
Сборка и запуск этого примера кода возвращает следующий вывод:
{"firstName":"John","lastName":"Smith","createdDate":1482047026009}
Как видите, поле createdDate показано как количество секунд с начала эпохи, которое является форматом по умолчанию, используемым для полей Date .
3.2. Использование аннотации на геттере
Теперь давайте используем @ JsonFormat , чтобы указать формат, в котором поле createdDate должно быть сериализовано. Вот класс User, обновленный для этого изменения. Поле createdDate было аннотировано, как показано, чтобы указать формат даты.
Формат данных, используемый для аргумента pattern , указывается в SimpleDateFormat
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "[email protected]:mm:ss.SSSZ")
private Date createdDate;
С этим изменением мы строим проект снова и запускаем его. Результат показан ниже:
{"firstName":"John","lastName":"Smith","createdDate":"[email protected]:53:34.740+0000"}
Как видите, поле createdDate было отформатировано с использованием указанного формата SimpleDateFormat с использованием аннотации @ JsonFormat .
Приведенный выше пример демонстрирует использование аннотации для поля. Он также может использоваться в методе получения (свойстве) следующим образом.
Например, у вас может быть свойство, которое вычисляется при вызове. В таком случае вы можете использовать аннотацию метода getter. Обратите внимание, что шаблон также был изменен, чтобы возвращать только часть даты момента:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
public Date getCurrentDate() {
return new Date();
}
Результирующий вывод выглядит следующим образом:
{ ... , "currentDate":"2016-12-18", ...}
3.3. Указание локали
Помимо указания формата даты, вы также можете указать локаль, которая будет использоваться для сериализации. Если не указать этот параметр, сериализация будет выполняться с использованием языка по умолчанию:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "[email protected]:mm:ss.SSSZ", locale = "en__GB")
public Date getCurrentDate() {
return new Date();
}
3.4. Указание формы
Использование @ JsonFormat с shape , установленным в JsonFormat.Shape.NUMBER , приводит к выводу по умолчанию для типов Date - в качестве количества секунд с начала эпохи _. Параметр pattern_ не применим к этому случаю и игнорируется:
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
public Date getDateNum() {
return new Date();
}
Вывод как показано ниже:
{ ..., "dateNum":1482054723876 }
4. Заключение
В заключение, @ JsonFormat используется для управления форматом вывода типов Date и Calendar , как показано выше.
Пример кода, показанный выше, доступен на GitHub over .