如何使用jackson反序列JSdate?

我从ExtJS中获取datestring的格式如下:

“2011-04-08T09:00:00”

当我尝试反序列化这个date时,它将时区更改为印度标准时间(将时间加上+5:30)。 这是我如何反序列化date:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); getObjectMapper().getDeserializationConfig().setDateFormat(dateFormat); 

这样做也不会改变时区。 我仍然在IST获得date:

 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); dateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); getObjectMapper().getDeserializationConfig().setDateFormat(dateFormat); 

如何在没有Timezone的麻烦的情况下反序列化date?

我find了一个解决方法,但是这个我需要在整个项目中注释每个date的setter。 有没有一种方法可以在创buildObjectMapper时指定格式?

以下是我所做的:

 public class CustomJsonDateDeserializer extends JsonDeserializer<Date> { @Override public Date deserialize(JsonParser jsonparser, DeserializationContext deserializationcontext) throws IOException, JsonProcessingException { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); String date = jsonparser.getText(); try { return format.parse(date); } catch (ParseException e) { throw new RuntimeException(e); } } } 

并用这个注释每个Date字段的setter方法:

 @JsonDeserialize(using = CustomJsonDateDeserializer.class) 

这适用于我 – 我使用jackson2.0.4

 ObjectMapper objectMapper = new ObjectMapper(); final DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); objectMapper.setDateFormat(df); 

除了Varun Achar的回答 ,这是我想出的Java 8变种,它使用java.time.LocalDate和ZonedDateTime而不是旧的java.util.Date类。

 public class LocalDateDeserializer extends JsonDeserializer<LocalDate> { @Override public LocalDate deserialize(JsonParser jsonparser, DeserializationContext deserializationcontext) throws IOException { String string = jsonparser.getText(); if(string.length() > 20) { ZonedDateTime zonedDateTime = ZonedDateTime.parse(string); return zonedDateTime.toLocalDate(); } return LocalDate.parse(string); } } 

有一个关于这个话题的好博客: http : //www.baeldung.com/jackson-serialize-dates使用@JsonFormat看起来最简单的方法。

 public class Event { public String name; @JsonFormat (shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss") public Date eventDate; } 

@JsonFormat仅适用于您正在使用的jackson版本支持的标准格式。

例如: – 与任何标准格式(“yyyy-MM-dd'T'HH:mm:ss.SSSZ”,“yyyy-MM-dd'T'HH:mm:ss.SSS'Z'”,“ EEE,dd MMM yyyy HH:mm:ss zzz“,”yyyy-MM-dd“))for jackson 2.8.6