gpt4 book ai didi

Json 映射器将 LocalDate 转换为月、年、月中的日期等

转载 作者:行者123 更新时间:2023-12-04 13:21:34 26 4
gpt4 key购买 nike

Json 映射器将 LocalDate 转换为月、年、月中的某天...当将 java 类转换为 json 时,像这样,

"dob":{
"year": 1992,
"month": "MARCH",
"dayOfMonth": 19,
"dayOfWeek": "THURSDAY",
"era": "CE",
"dayOfYear": 79,
"leapYear": true,
"monthValue": 3,
"chronology": {
"calendarType": "iso8601",
"id": "ISO"
}
}

这在 mysql 中作为 Date 保存为 1992-03-19 如何返回这个日期,就像它一样

"dob:1992-03-19"

最佳答案

Jackson 和 java.time 类型

jackson JavaTimeModule用于处理java.time序列化和反序列化。

它提供了一组serializersdeserializers对于 java.time类型。如果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);

它将应用于所有 LocalDateObjectMapper 序列化的实例.

以您的特定格式处理反序列化

对于反序列化,你可以使用类似的东西:

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);
}
}

关于Json 映射器将 LocalDate 转换为月、年、月中的日期等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51641182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com