2016-09-22 8 views
0

サーバーから受信したオブジェクトにJoda DateTimeフィールドがあります。たとえば、フィールド値は2016-09-01T11:30:00.000+03:00です。次に、gson.toJson()を呼び出すと、フィールドは日付専用の文字列2016-09-01に変換されます。Godaは、Joda DateTimeオブジェクトを解析する時間を省略します。

コード:

final GsonBuilder builder = new GsonBuilder().registerTypeAdapter(DateTime.class, new DateTimeSerializer()); 
final Gson gson = builder.create(); 
String str = gson.toJson(response.body()); 

私は私のカスタム型アダプタのserializeメソッドが呼び出されていないことに気づいたデバッグ。たぶん私はこれを正しく理解していないが、オブジェクトをJSON文字列に変換するときにこのメソッドを使用することを期待していた(一方でgson.fromJson()を文字列に使用するとdeserializeが呼び出される)。

これは、カスタムタイプのアダプタです:

public class DateTimeSerializer implements JsonDeserializer<DateTime>, JsonSerializer<DateTime> 
{ 
    private static final DateTimeFormatter DATE_FORMAT = ISODateTimeFormat.date(); 

    @Override 
    public DateTime deserialize(final JsonElement je, final Type type, final JsonDeserializationContext jdc) throws JsonParseException { 
     final String dateAsString = je.getAsString(); 
     return dateAsString.length() == 0 ? null : DATE_FORMAT.parseDateTime(dateAsString); 
    } 

    @Override 
    public JsonElement serialize(final DateTime src, final Type typeOfSrc, 
           final JsonSerializationContext context) { 
     return new JsonPrimitive(src == null ? "" : DATE_FORMAT.print(src)); 
    } 
} 

それがこのように解析されている理由を任意のアイデアや方法は、この問題を解決するには?ありがとう!

+2

あなたは明示的に 'ISODateTimeFormat.date()'を使っています。これは、日付/時刻ではなく、日付になるだけです。だから私はそれが時間情報を失っていることに驚くことはありません。確かに 'serialize'呼び出しが失敗していると心配しています... –

+0

Silly me ...' serialize'部分を調べていて、 'dateTime()'の代わりに 'date()'を使っていることに気付かなかった。これは、問題を解決しました、ありがとう! –

答えて

0

コメントに記載されているとおり、私はISODateTimeFormat.dateTime()の代わりにISODateTimeFormat.date()を使用していました。

関連する問題