📅  最后修改于: 2023-12-03 14:42:11.769000             🧑  作者: Mango
Jackson是一个流行的Java JSON库,它可以帮助程序员把Java对象序列化为JSON格式并将其从JSON格式反序列化到Java对象中。在Java世界中,日期和时间通常表示为java.util.Date或java.time.LocalDateTime对象。Jackson还提供了一些用于将日期和时间序列化到JSON格式的注释。
@JsonFormat注释可以用于指定日期和时间格式。可以在属性上使用它,也可以在类级别上使用它。以下是在属性级别上使用它的示例:
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
public class Event {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private Date eventDate;
public Event(Date eventDate) {
this.eventDate = eventDate;
}
public Date getEventDate() {
return eventDate;
}
}
@JsonFormat的shape属性指定日期的格式。在上面的示例中,我们使用了ISO日期格式,它由以下组件组成:
@JsonSerialize注释可以用于指定一个自定义的序列化程序。它可以在属性级别或getter级别上使用。以下是在getter级别上使用它的示例:
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.util.Date;
public class Event {
private Date eventDate;
public Event(Date eventDate) {
this.eventDate = eventDate;
}
@JsonSerialize(using = CustomDateSerializer.class)
public Date getEventDate() {
return eventDate;
}
}
在上面的示例中,我们使用了自定义的日期序列化程序CustomDateSerializer。CustomDateSerializer必须实现com.fasterxml.jackson.databind.JsonSerializer接口。以下是一个自定义日期序列化程序的示例:
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CustomDateSerializer extends JsonSerializer<Date> {
private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
@Override
public void serialize(Date date, JsonGenerator generator, SerializerProvider provider) throws IOException {
String formattedDate = dateFormat.format(date);
generator.writeString(formattedDate);
}
}
CustomDateSerializer将日期格式化为ISO日期格式,并将其写入JSON格式。
Jackson提供了两种将日期序列化到JSON格式的方法:使用@JsonFormat注释格式化日期和使用@JsonSerialize注释序列化日期。使用注释将使代码更清晰,并且可以提供自定义格式或序列化程序。