0

Restlet with Jacksonコンバーターを使用して、いくつかのプリミティブフィールドを持つオブジェクトを送信しています。今までそれはうまくいきました。しかし、GAEのmemcacheにオブジェクトを保存する必要があるため、Serializableを実装するためにオブジェクトが必要でした。何らかの理由で-クラスがSerializableを実装すると、動作が停止します。

Restletは以前とは異なる文字列表現を送信し、サーバーでその文字列を印刷することさえできません。そのバイト値をcharごとに出力してみました。最初の数値は次のとおりです。

0xfffd 0xfffd 0x0000 0x0005 0x0073 0x0072

どうもありがとう!

4

2 に答える 2

2

何が起こっているのかというと、JacksonConverterではなくDefaultConverterを戻り値に適用した結果が得られているということです。DefaultConverterは、Serializableオブジェクトをバイナリ表現(オブジェクトのシリアル化された形式)であるObjectRepresentationに変換します。要求されている特定のメディアタイプがない場合、コンバータロジックはSerializableをObjectRepresentationまたはJacksonRepresentationに等しく変換可能であると見なし、コンバータの順序付け方法により、前者を選択します。

これに対処する方法はいくつかあります。最も簡単な方法は、リクエストで目的のメディアタイプ(MediaType.APPLICATION_JSON)を明示的に指定することです。

より堅牢なソリューションは、JacksonConverterを、現在の値である0.5よりも高いnullバリアントをスコアリングする独自のカスタムバージョンに置き換えることです。変換ごとに新しいObjectMapperを作成する現在のJacksonRepresentationの動作をオーバーライドする場合、またはJackson 2.0を使用する場合は、とにかくこれを行う必要があります。これを達成する方法についての私の投稿については、restlet-discussリストを検索してください。(tpeierls)

この動作は最近のリリースで修正されている可能性があり、これに関連する問題の作業が進行中であることがわかっているので、アクションを実行する前に、問題追跡システムでJacksonConverterを検索してください。

于 2012-06-04T16:37:21.610 に答える
1

これはあなたが探していたものとは正確に一致しないかもしれませんが、それは私がそれが役に立つかもしれないと思ったほど十分に似ていました。

Restlet / Androidを使用して、Restlet/GAEで構築していたAPIにアクセスしていました。ある時点で、Serializableを実装するために、システムの基本オブジェクトを表すpojoクラスを変更する必要がありました。それを行ったとき、サーバーからこれらのオブジェクトを取得しようとすると、415エラーで失敗し始めました。送信する表現に関するRestletの混乱を修正するために、次のように追加しました。

Engine.getInstance()。getRegisteredConverters()。add(0、new JacksonConverter());

post()を実行する前に。http://restlet-discuss.1400322.n2.nabble.com/Restlet-Android-Object-representation-selection-application-x-java-serialized-object-vs-application--td6876345でいくつかの追加の議論があり ます。 html

プリミティブを使用していなかったことに気づきました。重要なのは、Serializableを追加するとすぐに問題が発生したことです。

于 2012-06-04T16:13:19.653 に答える