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
メソッドを使用しようとしましたが、これは何も変更されませんでした。
MessageBodyWriter
とMessageBodyReader
は自分の実装をオーバーライドするクラスがあると思っていましたので、独自の実装を削除しようとしましたが、JerseyはJSONをデシリアライズできないと訴えました(他のプロバイダ、私は推測する)。
私はMessageBodyReader
のreadFrom
メソッドでブレークポイントを設定しようとしましたが、リクエストは実際には実行を中断せずにデシリアライズされています。
私のクラスには異なるフィールドもいくつかの文字列と1つの日付が含まれていることを言及する必要があります。文字列は常に正しく非直列化されます。
2016-06-23T00:00:00.000+0200
(上記のコードで使用した日付書式文字列でフォーマットする必要があります)から別の日付を送信しようとしましたが、その時点で一部を削除して2016-06-17
になってしまいました。
私のmavenプロジェクトをきれいにして再コンパイルしても動作しませんでした。
Jettyが正しいクラスをロードしていない可能性があるので、私は同じコードをTomcat 8サーバーにデプロイしました。結果は同じでした。
私の最後の試みは、別のパラレルMessageBodyReader
を書くことだったが、代わりにObject
タイプのため、それは一般的な作りのため、私は特定のjava.util.Date
デシリアライザを作り、そしてまだreadFrom
メソッドが呼び出されないようです。
私は真剣に私が今何を試すことができるかわからない、何か考えている?
ありがとうございます。
、ヌル参照されたオブジェクトを処理していますこれはまだ動作していない、私は最後に 'XX'を削除しようとした、または例外のキャッチャーにブレークポイントを追加して何も起こらなかった –