Jackson中@jsonformat指南
1. 概述
在本教程中,我们将演示如何在 Jackson 中使用*@JsonFormat*。 @JsonFormat是一个 Jackson 注解,我们使用它来指定如何格式化 JSON 输出的字段和/或属性。 具体来说,此注解允许我们指定如何根据SimpleDateFormat格式格式化**Date和Calendar值。
2. Maven依赖
@JsonFormat是在jackson-databind 包中定义的,所以我们需要以下 Maven 依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.0</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. 在 Getter 上使用注解
我们现在将使用*@JsonFormat指定序列化createdDate字段的格式。 让我们看看针对此更改更新的 User 类。如图所示,我们注解createdDate*字段以指定日期格式。
用于pattern参数的数据格式由*SimpleDateFormat *指定:
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd@HH:mm:ss.SSSZ")
private Date createdDate;
有了这个改变,我们再次构建项目并运行它。 这是输出:
{"firstName":"John","lastName":"Smith","createdDate":"2016-12-18@07:53:34.740+0000"}
在这里,我们使用*@JsonFormat注解使用指定的SimpleDateFormat格式对createdDate*字段进行了格式化。 上面的示例演示了在字段上使用注解。我们也可以在 getter 方法(属性)中使用它。 例如,我们可能有一个在调用时计算的属性。在这种情况下,我们可以在 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 = "yyyy-MM-dd@HH:mm:ss.SSSZ", locale = "en_GB")
public Date getCurrentDate() {
return new Date();
}
3.4. 指定形状
使用*@JsonFormat并将shape设置为JsonFormat.Shape.NUMBER会导致Date类型的默认输出 - 作为自 epoch 以来的秒数。 参数pattern*不适用于这种情况并被忽略:
@JsonFormat(shape = JsonFormat.Shape.NUMBER)
public Date getDateNum() {
return new Date();
}
让我们看看输出:
{ ..., "dateNum":1482054723876 }