java-如何使用gson库来解析json响应+存储会话id,以便可以通过gae中的javascript函数访问它

时间:2011-10-28 13:02:23

标签: java javascript json google-app-engine

我正在尝试使用java.net.urlconnection对服务器的安全网址进行身份验证 - 基于Using java.net.URLConnection to fire and handle HTTP requests的有用教程

回复如下 -

返回:会话ID对象:{'session_id': 'username:session_token'}session_id将用于需要身份验证的所有方法。

此响应是JSON响应,我正在考虑使用Google GSON库(因为我的网络应用程序位于Google App Engine上)。

我到目前为止使用的代码(基于我上面给出链接的教程)如下所示 -

        String url = "https://api.wordstream.com/authentication/login";
        String charset = "UTF-8";
        String param1 = WORDSTREAM_API_USERNAME;
        String param2 = WORDSTREAM_API_PASSWORD;
        // ...
        String query = String.format("username=%s&password=%s", 
         URLEncoder.encode(param1, charset), 
         URLEncoder.encode(param2, charset));
        URLConnection connection = new URL(url + "?" + query).openConnection();
        connection.setRequestProperty("Accept-Charset", charset);
        InputStream response = connection.getInputStream();
        InputStream error = ((HttpURLConnection) connection).getErrorStream();
        //now checking HTTP Response status
        int status = ((HttpURLConnection) connection).getResponseCode();

如何进一步获取JSON响应并正确检索该响应中的会话ID?

另一个问题 - 我想将会话ID存储在可以通过javascript函数访问的会话数据中,因为我计划使用javascript函数进行调用并获取更多数据。这可能,以及如何实现这个?

1 个答案:

答案 0 :(得分:0)

步骤1-创建子类 - 将其声明为静态,以便GSON库可以使用它。这个子类应该模仿单个JSON响应中包含的数据 - 在我们的例子中,只有会话ID存储在响应中 - 因此这个类只包含一个字符串变量......

 static class LR { 

  public String response; 

  public LR() {
  // No args constructor for LR
   }
 }

现在,使用BUfferedReader和readline读取整个响应并将其存储在字符串变量中。

InputStream response = connection.getInputStream();
        BufferedReader br = new BufferedReader(new     
InputStreamReader(response));
String str="", temp;
while (null != ((temp = br.readLine())))
{
    System.out.println (str);
    str=str + temp;             
}       

最后,调用'fromJSON(string,class)'来获取值 -

Gson gson = new Gson();
LR obj2 = gson.fromJson(str, LR.class);   
return(" Session ID="+ obj2.response);