75 votes

Désérialisation de date de Jackson

Je suis une chaîne de date de ExtJS dans le format:

"2011-04-08T09:00:00"

lorsque j'essaie de désérialiser cette date, il change le fuseau horaire Indian Standard Time (ajoute +5:30 pour le moment) . C'est ainsi que je suis la désérialisation de la date:

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

Ce faisant également ne pas modifier le fuseau horaire. J'obtiens toujours la date en IST:

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

Comment faire désérialiser la date dans la façon dont elle est venue sans les tracas de Fuseau horaire?

147voto

Varun Achar Points 5781

J'ai trouvé un moyen de contourner le problème, mais il me faudra annoter le paramètre de chaque date tout au long du projet. Existe-t-il un moyen de spécifier le format lors de la création de ObjectMapper?

Voici ce que j'ai fait:

 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);
        }

    }

}
 

Et annoté la méthode de définition de chaque champ Date avec ceci:

 @JsonDeserialize(using = CustomJsonDateDeserializer.class)
 

58voto

Balaji Natesan Points 281

Cela fonctionne pour moi - j'utilise jackson 2.0.4

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

11voto

dadachi Points 186

J'ai créé CustomJsonDateSerializer.

 public class CustomJsonDateSerializer extends JsonSerializer<Date>
{
    @Override
    public void serialize(Date aDate, JsonGenerator aJsonGenerator, SerializerProvider aSerializerProvider)
            throws IOException, JsonProcessingException {

        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
        String dateString = dateFormat.format(aDate);
        aJsonGenerator.writeString(dateString);
    }
}
 

Et annoté la méthode d'accesseur en lecture de chaque champ Date avec ceci:

 @JsonSerialize(using = CustomJsonDateSerializer.class)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X