0

Spring MVCにシナリオがあり、handleRequestメソッドで明示的に例外をスローする必要があります。

たとえば

public class AdminController implements Controller {

public ModelAndView handleRequest(HttpServletRequest request,
        HttpServletResponse response) throws Exception {

   // for some request parameter this is run. For Eg. reqParam=xyz
    undeployTables();
}

public void undeployTables() throws Exception {
      throw new Exception("Undeploy Exception");

     }

ここで、春のサーブレットとURLのマッピングがweb.xmlで構成されていると仮定して、urlを介してサーブレットにアクセスしようとすると、 http://localhost:8080/server/admin?reqParam=xyzページに正しいエラーが表示されます。java.lang.Exception: Undeploy failed....

しかし、HTTPClientを介して、つまりJavaコードを介してコードにアクセスしようとすると、クライアントの応答はこの例外をキャッチできず、応答オブジェクトとしてHTTP401内部エラーが発生するだけです。クライアントのExceptionオブジェクトです。

コードは:

HttpPost httppost = new HttpPost(url.toURI());
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, timeout);
logger.info("executing request " + httppost.getURI()); //$NON-NLS-1$
// Create a response handler
HttpResponse response = httpclient.execute(httppost);// expect exception to be thrown here
statusCode = response.getStatusLine().getStatusCode();

クライアントの例外をキャッチできるように、どこで変更を行う必要があるかを教えてください。

グーグルできましたが、適切な答えを見つけることができませんでした。

4

1 に答える 1

0

HTTPを介して例外をスローすることはできません。あなたがする必要があるのは:

  1. サーバー側で例外を処理し、HTTP応答に適切なstatusCodeや応答ヘッダー/本文があることを確認します。

  2. クライアント側で、その応答を必要な例外に変換します。

HttpClientが例外処理のために提供するインターフェイスを調査する必要があります。

この質問に対する私の答えは、サーバー側で役立つかもしれません。

https://stackoverflow.com/a/11535691/1506440

于 2012-07-20T07:04:59.980 に答える