jsongeneratorをきれいなプリント日付と日時の値にする方法は?
質問
この方法を使用して、任意のオブジェクトを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の日付のフィールドが含まれている場合、印刷された値はエポック以来のミリ秒数です。代わりに、標準の「HH:MM:SS」表記でそれらをきれいに印刷したいと思います。どうすればこれを行う必要がありますか?
解決
エポックタイムスタンプ(1970年1月1日、UTC以降のミリ秒数)は時間の最も効率的かつ正確な表現であるため、ほぼすべての日付関連オブジェクトがシリアル化されています。もちろんそれを上書きすることができます。質問に記載されている形式を使用する場合は、次をコードに追加する必要があります。
DateFormat myDateFormat = new SimpleDateFormat("hh:mm:ss");
objectMapper.getSerializationConfig().setDateFormat(myDateFormat);
objectMapper.getDeserializationConfig().setDateFormat(myDateFormat);
ジャクソンJSONプロセッサの日付と時間に関する詳細については、次のリンクを参照してください。 http://wiki.fasterxml.com/jacksonfaqdatehandling
他のヒント
これは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を明示的に使用する代わりに。
所属していません StackOverflow