杰克逊和java.time 类型
Jackson JavaTimeModule 用于处理java.time 的序列化和反序列化。
它为java.time 类型提供了一组serializers 和deserializers。如果SerializationFeature.WRITE_DATES_AS_TIMESTAMPS 被禁用,java.time 类型将以标准ISO-8601 字符串表示形式进行序列化。
以您的特定格式处理序列化
然而,一旦你有了一个非常特殊的格式,你就可以创建一个自定义的序列化器:
public class DateOfBirthSerializer extends JsonSerializer<LocalDate> {
@Override
public void serialize(LocalDate value, JsonGenerator gen,
SerializerProvider serializers) throws IOException {
gen.writeString("dob:" + value.format(DateTimeFormatter.ISO_DATE));
}
}
那么你可以如下使用它:
public class Foo {
@JsonSerialize(using = DateOfBirthSerializer.class)
private LocalDate dateOfBirth;
// Getters and setters
}
您也可以使用:
SimpleModule module = new SimpleModule();
module.addSerializer(LocalDate.class, new DateOfBirthSerializer());
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(module);
它将应用于使用该ObjectMapper 序列化的所有LocalDate 实例。
以您的特定格式处理反序列化
对于反序列化,您可以使用类似:
public class DateOfBirthDeserializer extends JsonDeserializer<LocalDate> {
@Override
public LocalDate deserialize(JsonParser p,
DeserializationContext ctxt) throws IOException {
String value = p.getValueAsString();
if (value.startsWith("dob:")) {
value = value.substring(4);
} else {
throw ctxt.weirdStringException(value,
LocalDate.class, "Value doesn't start with \"dob:\"");
}
return LocalDate.parse(value, DateTimeFormatter.ISO_DATE);
}
}