在某些情况下,我需要将动态属性以用户使用Rest服务提供的HashMap的形式存储到数据库中。此动态属性定义为
HashMap<String, Object> attr = new HashMap<>();
现在,我必须根据业务逻辑将对象转换为各自的运行时数据类型。到目前为止,我能够成功转换字符串,数字,但是Date
引起了麻烦。这是我的转换逻辑。
input = attr.get(label);
if (input instanceof String) {
// logic 1
}
else if (input instanceof Number) {
// logic 2
}
else if (input instanceof Date) {
// logic 3
}
问题是,当日期以任何日期格式(在我的情况下为zulu格式)给出时,jacksonjson
转换器无法解析它,并抛出错误,表明无法解析输入字符串。
我了解它曾经是Date
对象。我本可以编写JsonDeserializer
并用它注释Date
对象,但是由于它是Object
中的HashMap
,我应该如何实现。
我也曾尝试捕获该日期字符串并使用SimpleDateFormat
对其进行解析,但失败了,因为该逻辑发生在此逻辑之前。
答案 0 :(得分:1)
如果您要从json解析日期,则可能应该这样做。在JSON中,您的日期为字符串。您必须使用 SimpleDateFormat 将字符串形式的日期转换为实际日期格式。它不会找到日期的输入实例,因此您无法将json解析为实际日期。例如,如果您的json看起来像这样,
{'name':'firstname','date':'14/02/2019'}
您现在可以像这样将日期转换为实际日期
SimpleDateFormat formatter1=new SimpleDateFormat("dd/MM/yyyy");
Date date1=formatter1.parse(input); //here input is taken from your case which represent date
答案 1 :(得分:0)
如果您的JDK是modern -- read 8+,则可以按以下方式使用java.time.DateFormat:
java.time.format.LocalDate date = java.time.format.LocalDate.parse(ourDateAsString, java.time.format.DateTimeFormat.BASIC_ISO_DATE);
java.util.Date dateObject = java.util.Date.from(date.atStartOfDay()
.atZone(java.time.ZoneId.systemDefault())
.toInstant());
希望有帮助。