-1

Web アプリケーションで Struts 2 を使用しています。ユーザーセッションをインターセプターにチェックするコードを記述しますが、応答として返さnet.sf.json.JSONObjectれている間に、応答オブジェクトをリセットし、オブジェクトに null を設定します。私のコードを確認してください。

import net.sf.json.JSONObject;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class AuthorizationInterceptor implements Interceptor {

JSONObject response = new JSONObject();

public String intercept(ActionInvocation invocation) {
 try { 
      Map session = invocation.getInvocationContext().getSession();
        if (session.get("userId") == null) {
           response.put("errorCode", "SESSION_OUT");                
            return ActionSupport.ERROR;
        } else {
            System.out.println("Session found");
            Object action = invocation.getAction();
            return invocation.invoke();
        }
    } catch (Exception e) {
        return ActionSupport.ERROR;
    }
}

public JSONObject getResponse() {
    return response;
}

public void setResponse(JSONObject response) {
    this.response = response;
}

}

インターセプターからの応答として JSON オブジェクトを取得するにはどうすればよいですか。この問題を解決するのを手伝ってください。

4

1 に答える 1

2

コードに複数のエラーがあります。

  • レスポンスはHttpServletResponseです。その名前を JSONObject に付けるべきではありません。
  • インターセプターはスレッドセーフではありません。つまり、メソッド内で JSONObject を定義して、複数のユーザーが同時に更新するのを防ぐ必要があります。
  • JSON プラグインのドキュメント で説明されているように、 statusCode または errorCode を使用する必要があります。返すエラー結果として設定します。

statusCode を使用して、応答のステータスを設定します。

<result name="error" type="json">
  <param name="statusCode">304</param>
</result>

エラーを送信する errorCode (サーバーは、シリアル化された JSON ではない何かをクライアントに送信することになる可能性があります):

 <result name="error" type="json">
  <param name="errorCode">404</param>
</result>

次に、AJAX コールバック関数でクライアント側で読み取ります。

于 2013-06-21T12:42:41.930 に答える