将json字符串转换为日期对象

时间:2019-02-14 04:58:09

标签: java json spring-boot jackson

在某些情况下,我需要将动态属性以用户使用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对其进行解析,但失败了,因为该逻辑发生在此逻辑之前。

2 个答案:

答案 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());

希望有帮助。