json - 如何将相同但具有不同值的 JSON 对象反序列化为 java 类
问题描述
我有以下情况:
有时我得到这个JSON 对象
{"id": 1, "cp": "male", "money": 10.0, "startDate": "07:00", "endDate": "10:00"}
和其他人这个
{"id":1, "cp": "male", "money": 10.0, "startDate": 21600, "endDate": 32400}
如您所见,JSON 具有相同的字段,但有时startDate和endDate在第二种情况下以秒为单位的格式不同。
你有简单的java类
public class Person {
private Integer id;
private String cp;
private Double money;
@JsonDeserialize(converter = StringToLocalTimeConverter.class)
private LocalTime startDate;
@JsonDeserialize(converter = StringToLocalTimeConverter.class)
private LocalTime startDate;
//Getter-Setter
转换器
public class StringToLocalTimeConverter extends StdConverter<String, LocalTime> {
static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ISO_LOCAL_TIME;
@Override
public LocalTime convert(String value) {
Long number = Long.parseLong(value);
return LocalTime.MIN.plusSeconds(number);
}
}
显然,我遇到了解析异常,因为由于格式的原因,我无法将两个数据值映射到同一个 LocalTime 中。
是否可以将两个JSON 对象映射到同一个类?我该如何解决这个问题,或者我必须创建单独的类可以应用哪些解决方案。
解决方案
好吧,您可以DateTimeFormatter.ISO_LOCAL_TIME
先尝试解析它。如果失败,则将其解析为 long :
public class StringToLocalTimeConverter extends StdConverter<String, LocalTime> {
static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ISO_LOCAL_TIME;
@Override
public LocalTime convert(String value) {
try {
return LocalTime.parse(value, DATE_FORMATTER);
} catch (DateTimeParseException e) {}
Long number = Long.parseLong(value);
return LocalTime.MIN.plusSeconds(number);
}
}
推荐阅读
- php - 找不到类“Tymon\JWTAuth\Providers\LaravelServiceProvider”
- html - 角按钮单击旋转图标
- javascript - Mocha Chai 或 JEST 或两者兼而有之?
- c++ - 当我使用“using cout = std::cout;”时,为什么会出现错误“'cout' in namespace 'std' does not name a type”?
- python - 从python打开另一个文件
- javascript - jQuery 为标签使用特定的 UL 元素
- java - 在片段之间发送结果的最佳方式?
- ios - Appcelerator - iOS:TEXT_ALIGNMENT 属性的属性字符串?
- sql - 如何使用 SQL 查询在同一列中减去两行的值?
- c - 计算c中e位数的应用程序