2016-06-24 1 views
0

JerseyとGsonを使用してJSONのシリアル化/逆シリアル化を行う小さなサーブレットで、奇妙な問題が発生しています。私は実際には、http://eclipsesource.com/blogs/2012/11/02/integrating-gson-into-a-jax-rs-based-application/のようなジャージーのために書かれた基本的なGsonプロバイダをコピーして貼り付けました。日付が(標準ISO 8601形式で)逆シリアル化されるまで、すべてうまくいくように見えました。 。Jersey + Gsonはjava.util.Dateを直列化しません

私の最初の試みは、そのように、gsonBuilderインスタンスを返す前に、デシリアライザ型アダプタを登録することでした:

import java.util.Date; 

... 

gsonBuilder.registerTypeAdapter(Date.class, 
    new JsonDeserializer<Date>() { 
     @Override 
     public Date deserialize(JsonElement json, Type type, 
           JsonDeserializationContext arg2) throws JsonParseException { 
      try { 
       System.out.println(json); 
       return (new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXX")).parse(json.getAsString()); 
      } catch (ParseException e) { 
       return null; 
      } 
     } 
    }); 

これは動作しませんでした、と私はPOSTリクエストを送信するときに何もプリントアウトされません。 gsonBuilderインスタンスを返す前にsetDateFormatメソッドを使用しようとしましたが、これは何も変更されませんでした。

MessageBodyWriterMessageBodyReaderは自分の実装をオーバーライドするクラスがあると思っていましたので、独自の実装を削除しようとしましたが、JerseyはJSONをデシリアライズできないと訴えました(他のプロバイダ、私は推測する)。

私はMessageBodyReaderreadFromメソッドでブレークポイントを設定しようとしましたが、リクエストは実際には実行を中断せずにデシリアライズされています。

私のクラスには異なるフィールドもいくつかの文字列と1つの日付が含まれていることを言及する必要があります。文字列は常に正しく非直列化されます。

2016-06-23T00:00:00.000+0200(上記のコードで使用した日付書式文字列でフォーマットする必要があります)から別の日付を送信しようとしましたが、その時点で一部を削除して2016-06-17になってしまいました。

私のmavenプロジェクトをきれいにして再コンパイルしても動作しませんでした。

Jettyが正しいクラスをロードしていない可能性があるので、私は同じコードをTomcat 8サーバーにデプロイしました。結果は同じでした。

私の最後の試みは、別のパラレルMessageBodyReaderを書くことだったが、代わりにObjectタイプのため、それは一般的な作りのため、私は特定のjava.util.Dateデシリアライザを作り、そしてまだreadFromメソッドが呼び出されないようです。

私は真剣に私が今何を試すことができるかわからない、何か考えている?

ありがとうございます。

答えて

0

エラーの理由はここにある...

try { 
    System.out.println(json); 
    return (new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXX")).parse(json.getAsString()); 
} catch (ParseException e) { 
    return null; 
} 

は、ここでは具体的には:

"YYYY-MM-dd'T'HH:MM:ss.SSSXX"

java DateとSimpleParserは、ミリ秒間に最大で3つの場所しか保持できず、ワイルドカードもありません。SimpleDateFormatのために使用される文字列でSSS XXので、あなたのパーサが エルゴ、あなたが引くが、nullを基準日に戻ってきていることを、例外がスローされます。

Gsonは

+0

、ヌル参照されたオブジェクトを処理していますこれはまだ動作していない、私は最後に 'XX'を削除しようとした、または例外のキャッチャーにブレークポイントを追加して何も起こらなかった –

関連する問題