json - Json 映射器将 LocalDate 转换为月、年、月日等
问题描述
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"
}
}
Date
这在 mysql 中保存为一个,就像1992-03-19
如何返回这个日期一样
"dob:1992-03-19"
解决方案
杰克逊和java.time
类型
JacksonJavaTimeModule
用于处理java.time
序列化和反序列化。
它为这些类型提供了一组序列化器和反序列化器。java.time
如果禁用,类型将以标准ISO-8601字符串表示形式SerializationFeature.WRITE_DATES_AS_TIMESTAMPS
进行序列化。java.time
以您的特定格式处理序列化
然而,一旦你有了一个非常特殊的格式,你就可以创建一个自定义的序列化器:
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);
它将应用于LocalDate
使用 that 序列化的所有实例ObjectMapper
。
以您的特定格式处理反序列化
对于反序列化,您可以使用以下内容:
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);
}
}
推荐阅读
- bash - 无法找到可执行文件:“bash”错误:使用 Bash@3 Azure DevOps 任务的内联脚本
- python - 为什么 Python 找不到我正在导入的文件?
- html - 打开时选择带有图标和文本的选项,折叠时仅带有图标
- java - Java Calculator:算术运算符不会出现在屏幕上
- javascript - 如何获取在条带元素输入中输入的值?
- django - 使用 Django REST 框架进行简单重定向
- java - 这个程序在我输入无效输入后,我需要从头开始,我怎么能在java中做到这一点?
- java - 从firebase在recyclerview中以不正确的格式加载图像
- sql - 如何添加“总计”?
- routes - Blazor:强制组件/页面生命周期