Как использовать библиотеку gson для анализа ответа json + сохранения идентификатора сеанса, чтобы к нему могли обращаться функции javascript в gae - PullRequest
0 голосов
/ 28 октября 2011

Я пытаюсь аутентифицироваться на защищенном URL-адресе сервера, используя java.net.urlconnection - на основе полезного руководства по Использование java.net.URLConnection для запуска и обработки HTTP-запросов

Ответбудет как указано ниже -

Возврат: объект идентификатора сеанса: {'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 и правильно получить идентификатор сеанса из этого ответа?

Еще один вопрос - я хочу сохранить идентификатор сеанса в данных сеанса, которыемогут быть доступны с помощью функций javascript, потому что я планирую использовать функции javascript для выполнения вызовов и получения дополнительных данных.Возможно ли это и как это реализовать?

1 Ответ

0 голосов
/ 29 октября 2011

Шаг 1. Создайте подкласс - объявите его как статический, чтобы он мог использоваться библиотекой GSON. Этот подкласс должен имитировать данные, содержащиеся в одном ответе JSON - в нашем случае в ответе хранится только идентификатор сеанса, следовательно, этот класс содержит только одну строковую переменную ...

 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...