Question

J'utilise cette méthode pour convertir un objet à une chaîne JSON:

private String objectToJson(Object object) throws IOException {
        // write JSON
        StringWriter writer = new StringWriter();
        ObjectMapper mapper = new ObjectMapper();
        final JsonGenerator jsonGenerator = mapper.getJsonFactory().createJsonGenerator(writer);
        jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter());

        mapper.writeValue(jsonGenerator, object);
        return writer.toString();
    }

Lorsque l'objet en cours d'impression contient des champs qui sont java.util.Date ou DateTime de jodatime, la valeur imprimée est le nombre de millisecondes depuis l'époque. Je voudrais, au contraire, de les imprimer jolie dans une norme « HH: MM: SS » notation. Comment dois-je m'y prendre?

Était-ce utile?

La solution

Parce que l'horodatage d'époque (nombre de millisecondes depuis le 1er Janvier 1970, UTC) est la plus efficace et la représentation précise du temps, presque tous les objets liés à la date et l'heure sont sérialisés à elle. Vous pouvez d'écraser cours et si vous souhaitez utiliser le format mentionné dans la question, vous auriez besoin d'ajouter ce qui suit à votre code:

DateFormat myDateFormat = new SimpleDateFormat("hh:mm:ss");
objectMapper.getSerializationConfig().setDateFormat(myDateFormat);
objectMapper.getDeserializationConfig().setDateFormat(myDateFormat); 

Pour plus d'informations sur les dates et heures dans le Jackson JSON-processeur voir le lien suivant: http://wiki.fasterxml.com/JacksonFAQDateHandling

Autres conseils

Cela a déjà été mentionné dans les FAQ points de réponse, mais juste au cas où: vous pouvez choisir entre la représentation numérique et textuel (être numérique utilisé par défaut car il est beaucoup plus rapide) en utilisant cette fonction:

objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);

faire cela utilisera le format de date par défaut, que vous pouvez ensuite redéfinir comme mentionné (avec setDateFormat).

De plus: vous pouvez vous simplifier le code comme ceci:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
mapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
return mapper.writeValueAsString(object);

au lieu d'utiliser StringWriter et JsonGenerator explicitement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top