質問

この方法を使用して、任意のオブジェクトを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を明示的に使用する代わりに。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top