Как заставить JsonGenerator красиво печатать значения Date и DateTime? - PullRequest
7 голосов
/ 14 декабря 2010

Я использую этот метод для преобразования любого объекта в строку 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();
    }

Когда печатаемый объект содержит поля, которые являются java.util.Date или jodatime's DateTime, напечатанное значение являетсяколичество миллисекунд с начала эпохи.Вместо этого я хотел бы напечатать их в стандартном формате «ЧЧ: ММ: СС».Как мне это сделать?

Ответы [ 2 ]

8 голосов
/ 19 декабря 2010

Это уже упоминалось в FAQ, на который указывает первый ответ, но на всякий случай: с помощью этой функции вы можете выбирать между числовым и текстовым представлением (числовое используется по умолчанию, поскольку оно намного быстрее):

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

при этом будет использоваться формат даты по умолчанию, который затем можно переопределить, как указано (с помощью setDateFormat).

Также: вы можете упростить свой код следующим образом:

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

вместо явного использования StringWriter и JsonGenerator.

7 голосов
/ 15 декабря 2010

Поскольку отметка времени эпохи (число миллисекунд с 1 января 1970 г., UTC) является наиболее эффективным и точным представлением времени, к ней сериализуются почти все объекты, относящиеся к дате и времени.Вы можете, конечно, перезаписать его, и если вы хотите использовать формат, упомянутый в вопросе, вам нужно добавить следующее в ваш код:

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

Для получения дополнительной информации о датах и ​​времени в ДжексонеJSON-процессор см. По следующей ссылке: http://wiki.fasterxml.com/JacksonFAQDateHandling

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...