1

SpringでRESTアプリを構築しています。私はそれをPOJOのやり方でやっています。ここで、時間がかかりすぎる GET リクエストを処理したいと考えています (ユーザーの接続が非常に悪いためとしましょう)。おそらく5000ミリ秒後にリクエストをキャンセルすることで、これを(Springで)処理するにはどうすればよいですか?

私のアプローチ:
だから、ある種のタイムアウトが必要だと思います。私のグーグルツアーで、HttpComponentsClientHttpRequestFactory といわゆる setConnectTimeout() 関数があることがわかりました。私はそれをテストしましたが、スローされた例外は「奥深くまで」処理できず、AsyncTask の致命的な例外として渡されます。だから私は失敗しました。

ベストプラクティスは何ですか? 何か案が?

編集:Springが設定されているので、Springのソリューションのみでお願いします。

編集:私の調査によると、それは不可能です。@ Spring Forums でさえまだ回答がありません: http://forum.springsource.org/showthread.php?135656-How-can-I-handle-GET-requests-that-are-taking-to-long

4

2 に答える 2

2

まず第一に、AsyncTask を使用してネットワーク リクエストを実行しないでください。これは、デバイスの向きを変更すると、Activity が破棄され、再作成された後に AsyncTask が破棄された Activity の参照を保持し、メモリ リークが発生するためです。

代わりにサービスを使用してください。RoboSpiceを使用することをお勧めします。POJOとSpringでRESTリクエストを簡単に作るためのライブラリです。

ローカルおよびリモートの自動データ永続性管理に興味がある場合は、RestDroidを使用してそれを処理できます (POJO も使用できます)。

どちらのライブラリも RequestListeners を使用して、あなたが話しているケースを管理します。リクエストが失敗すると、UI に通知されます。

于 2013-03-18T11:03:23.527 に答える
0

より単純なアプローチを採用しないのはなぜですか。このコードを試してみると、より明示的な例外が発生します。

HttpParams httpParameters = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParameters, 5000);
HttpConnectionParams.setSoTimeout(httpParameters, 10000);

HttpClient client = new DefaultHttpClient(httpParameters);
HttpGet request = new HttpGet(url);

HttpResponse response = client.execute(request);
于 2013-03-13T22:00:18.120 に答える