Struts 2 - Interceptor重置响应JSON对象

时间:2013-06-21 12:12:27

标签: java json struts2 interceptor

我在我的网络应用程序中使用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对象作为响应。 请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

您的代码中存在多个错误。

  • 响应为HttpServletResponse,您不应将该名称赋予JSONObject。
  • 拦截器不是THREAD-SAFE,这意味着你应该在方法中定义JSONObject,以防止多个用户同时更新它,一个在另一个上面
  • 您应该使用statusCode或errorCode as described in the JSON plugin documentation,将其配置为您要返回的错误结果:
  

使用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回调函数中将其读取到客户端。