0

私は、Spring で RESTful 呼び出しを処理するために HttpClient 4.1.x を利用するアプリケーション システムを掘り下げてきました。

httpclient を直接処理する場合と、RestTemplate のトランスポートとして使用する場合の両方で、これはうまく機能していますが、実行でカバーされているかどうかわからない何かが必要であることがわかりました。

「BasicResponseHandler」はコンテンツ応答を文字列として扱い、サーバーからの応答が 300 未満の場合にそれを返します。私が使用している RESTful システムは、エラー応答の一部として XML ドキュメントを提供します (ステータス コード >= 400 )。この XML 応答には、クライアント開発者に役立つ情報が含まれています。

ResponseHandler インターフェースを介してこれを扱った経験があるかどうかを知りたいです。基本的に、BasicResponseHandler は、ステータス >= 300 がある場合に ClientProtocolException を投げます。処理する AbstractHttpClient 実装は、その例外をトラップし、エンティティを黙って消費してから、投げられた IOException (ClientProtocolException) を再投げます。

追加情報を含めるために ClientProtocolException のサブクラスを作成することをお勧めしますか?

エラー ステータスの場合は、既存のドキュメントをそれぞれのタイプにアンマーシャリングし (利用可能な場合)、それをスローして、応答の内容を保持します。

または、このケースを処理するために欠落している別のメカニズムはありますか?

4

1 に答える 1

1

インターフェイスの目的はResponseHandler、呼び出し元がメッセージ コンテンツをメモリにバッファリングすることなく、HTTP 応答をダイジェストできるようにすることです。このインターフェースを使用することの追加の利点は、HttpClient によって自動的に処理されるリソースの割り当て解除について心配する必要がないことです。

特定のケースでは、単純で代表的でない文字列を返すのではなく、低レベルの HTTP 応答コンテンツから高レベルのドメイン オブジェクトを構築することを検討する必要があります。

したがって、例外をスローする代わりに、リクエストのステータス (成功、失敗、部分的なレスポンスなど) で構成されるオブジェクトと、解析された XML ドキュメントまたはメッセージの内容を表す JAXB オブジェクトを呼び出し元に返すことを検討してください。

于 2013-01-16T11:45:25.540 に答える