2016-05-17 11 views
1

私はSpringとRESTEasyに基づいて(JSON)RESTベースのアプリケーションを持っています。私たちは、サービスへの入力として受け入れられる文字のセットを制限する必要があります。 I は、逆シリアル化中または後でPOJO自体に制限を適用できますが、いずれの点でも各文字を明示的に検査しているので、JSONストリームを読み込んでいるときにジャクソンの解析に何らかのフィルタを挿入する方が効率的です。Jackson JSON解析に低レベルの文字フィルタを適用する方法は?

質問:ジャクソンはそれを行うためのプラグインポイントを提供していますか?それぞれのプロパティ値の各文字が有効である(つまり、アプリの要件に応じて特定のセットにある)ことを検証できるような時間に、低レベルの解析をデコレートまたはオーバーライドできるようにするものがあります。

答えて

2

JSON文字列値内に許可されている文字を意味する場合は、現在、フィルタまたはトランス機能はありません。あなたはgetText()への呼び出しを傍受する可能性のあるJsonParserDelegateの実装を検討することができますが、それはあまりクリーンなメカニズムではないかもしれません。あるいは、最初にコンテンツをツリー(JsonNode)として読み込み、それをトラバースして文字列値を整理することもできます。それ以降はObjectMapper.convertValue(fromNode, MyType.class)を使用してデータバインディングを行います。 RESTEasyのの文脈では

、あなたはMappingJsonFactoryを拡張し、カスタムデリゲートを返すように_createJsonParser(...)メソッドをオーバーライドして、カスタムJsonParserDelegateを注入することができます。その後、JacksonJsonProvider(JacksonのJAX-RSプロバイダ)への拡張を実装し、そのコンストラクタにカスタムファクトリを持つObjectMapperを作成します。この例はthis answer to a related questionにあります。

+0

「JsonParserDelegate」は私の目的にとって有望です。どのようにRESTEasyが使用するパーサーのためにデリゲートを設定することができますか?または、おそらく、どのように通常はカスタムデリゲートを構成し、RESTEasyがそれを公開するかどうかを調べることができます。 –

+0

@ E-Riz残念ながら、私は宣言的な処理(POJOのデータバインディング)のコンテキストでこれがどのように行われるのか分かりません。 'JsonFactory'をサブクラス化し、' createParser() 'メソッドをオーバーライドし、このファクトリを使用する' ObjectMapper'を登録する必要があります。 – StaxMan

+0

RESTEasyとの統合方法に関する詳細を編集しました –

関連する問題