3

要件 REST API を構築しています。2 つの REST 呼び出しがあります。指定されたパラメーターに基づいてフォーマットされた JSON を出力する /format の呼び出し。/raw を同じパラメーターで呼び出すと、JSON が raw 値 (フォーマットなし) で出力されます。ここでの書式設定は、日付の変更、値の正しい通貨の表示、小数の書式設定、時刻の書式設定など、ロケール固有です。

ツール Java、Tomcat、Spring、Apache CXF、JAX-RS、および Jackson。

実装 REST サービスがセットアップされ、正常に動作します。問題ありません。NumberFormat、DateFormat、DecimalFormat などを使用して目的のフォーマットを提供する個別のカスタム シリアライザーを作成しました。Jackson から SimpleModule を拡張して、上記のすべてのカスタム シリアライザーを登録しました。私は2つの別々のObjectMapper(FomatOMとRawOM)を使用しています。FormatOMは、フォーマットされたJSON出力用のカスタムモジュールを登録します。RawOMは、要件に従って生のJSON出力用です。これらの 2 つのオブジェクトマッパーは、2 つの異なる JacksonJsonProviders に登録され、Spring 構成 xml で Bean として宣言されます。/format では FormatOM とカスタム シリアライザーを使用し、/raw では RawOM を使用します。

問題 期待どおりに動作しません。/format 呼び出しを介してリクエストを行うと、FormatOM が使用され、/raw の場合は RawOM が使用されると予想していました。何が起こっているかというと、最初に呼び出しを行うと、後続の呼び出しは同じ ObjectMapper を使用して処理されます。したがって、最初の呼び出しが /raw の場合。/format または /raw への後続の呼び出しは、生の JSON 出力をレンダリングします。Tomcat の再起動後、最初の呼び出しが /format に対するものである場合、いずれかの API 呼び出しへの後続の呼び出しは、フォーマットされた JSON 出力をレンダリングします

質問 1. フォーマットされた + 生の JSON 出力をレンダリングするという私の要件をどのように達成しますか? 2. 実装の何が問題になっていますか? 3. アイデア、提案、批評はありますか? 4. リクエスト ベースのマッパーを使用する他の方法はありますか?

ありがとう

4

2 に答える 2

0

One work-around is just to use a StreamingOutput, and bundle specific ObjectMapper in there, use it directly (ObjectMapper.writeValue(output, value);)

于 2012-11-21T23:58:19.193 に答える
0

StaxMan さん、ご回答ありがとうございます。私はSpringを使用しているので、 リクエストごとにマッパーを設定するために注入しJacksonJsonProviderて行うことにしました。JacksonJsonProvider.setMapper(mapper)誰かが上記のアプローチを試して問題に遭遇した場合は、私に知らせてください. 何らかの問題が発生した場合は、この回答を更新します。

于 2012-11-30T12:08:02.047 に答える