我正在使用此方法将任何对象转换为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的dateTime的字段时,印刷值是自时代以来的毫秒数。相反,我想以标准的“ HH:MM:SS”符号来打印它们。我应该怎么做?

有帮助吗?

解决方案

由于时期时间戳(自1970年1月1日以来,UTC以来的毫秒数)是时间的最有效和准确的表示,因此将几乎所有与日期和时间相关的对象都序列化。您当然可以覆盖它,如果要使用问题中提到的格式,则需要将以下内容添加到您的代码中:

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

有关Jackson JSON加工程序中有关日期和时间的更多信息,请参阅以下链接: http://wiki.fasterxml.com/jacksonfaqdatehandling

其他提示

在常见问题解答中已经提到了这一点,但以防万一:您可以使用此功能在数字和文本表示之间进行选择(默认情况下使用数字,因为它更快得多):

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。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top