2013-10-03 5 views
4

Мне нужно интегрировать службы Kii MbaaS в одном из моих веб-приложений помимо мобильных приложений. Я использовал Android SDK и смог его подключить. Однако для веб-сайта, использующего Java-решение, у них нет SDK, и попросил меня выполнить эту операцию с помощью REST. Теперь я планировал использовать ApacheHttpClient из Servlet для подключения к службам REST. Формат REST из их документов приведен ниже. В ApacheHttpClient я знаю, что могу передавать заголовки (-H) как HttpGet.addHeader («content-type», «application/json»). Однако я не уверен, как передавать данные (-d). Может ли кто-нибудь помочь мне здесь, указав на какую-либо ссылку на учебник или какой-либо пример кода о том, как передавать данные в службу REST вместе с заголовками?REST вызов с использованием ApacheHttpClient с данными и заголовками

Синтаксис REST дается

ценам ниже
curl -v -X POST \ 
    -H "content-type:application/json" \ 
    -H "x-kii-appid:{APP_ID}" \ 
    -H "x-kii-appkey:{APP_KEY}" \ 
    "https://api.kii.com/api/oauth2/token" \ 
    -d '{"username":"user_123456", "password":"123ABC"}' 

Спасибо заранее.

------------------------- Редактировать -------------------- ------------------------------ вот пример кода Java, который я написал для подключения к библиотеке Apache HttpClient 4.3, но я сохраняю получить ошибку, как 400 ... может ли кто-нибудь посоветовать?

ошибка -

Исключение в потоке "основного" java.lang.RuntimeException: Ошибка: HTTP-код ошибки : 400 в com.app.test.RestClientTest.main (RestClientTest.java:49)

package com.app.test; 

    import java.io.BufferedReader; 
    import java.io.IOException; 
    import java.io.InputStreamReader; 
    import java.net.MalformedURLException; 
    import java.util.ArrayList; 
    import java.util.List; 

    import org.apache.http.Consts; 
    import org.apache.http.NameValuePair; 
    import org.apache.http.client.entity.UrlEncodedFormEntity; 
    import org.apache.http.client.methods.CloseableHttpResponse; 
    import org.apache.http.client.methods.HttpPost; 
    import org.apache.http.impl.client.CloseableHttpClient; 
    import org.apache.http.impl.client.HttpClients; 
    import org.apache.http.message.BasicNameValuePair; 

    public class RestClientTest { 

     /** 
     * @param args 
     */ 
     public static void main(String[] args) { 
      CloseableHttpClient httpClient = null; 
      HttpPost httpost = null; 
      CloseableHttpResponse response = null; 

      try { 

       httpClient = HttpClients.createDefault(); 
       httpost = new HttpPost("https://api.kii.com/api/oauth2/token"); 
       httpost.addHeader("content-type", "application/json"); 
       httpost.addHeader("x-kii-appid", "xxxxx"); 
       httpost.addHeader("x-kii-appkey", "xxxxxxxx"); 

       List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
       nvps.add(new BasicNameValuePair("username", "xxxxx")); 
       nvps.add(new BasicNameValuePair("password", "xxxxx")); 

       // StringEntity input = new 
       // StringEntity("{\"qty\":100,\"name\":\"iPad 4\"}"); 
       // input.setContentType("application/json"); 
       httpost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); 

       response = httpClient.execute(httpost); 

       if (response.getStatusLine().getStatusCode() != 200) { 
        throw new RuntimeException("Failed : HTTP error code : " 
          + response.getStatusLine().getStatusCode()); 
       } 

       BufferedReader br = new BufferedReader(new InputStreamReader(
         (response.getEntity().getContent()))); 

       String output; 
       System.out.println("Output from Server .... \n"); 
       while ((output = br.readLine()) != null) { 
        System.out.println(output); 
       } 
      } catch (MalformedURLException e) { 

       e.printStackTrace(); 

      } catch (IOException e) { 

       e.printStackTrace(); 

      } finally { 
       try{ 
        response.close(); 
        httpClient.close(); 
       }catch(Exception ex) { 
        ex.printStackTrace(); 
       } 
      } 

     } 
    } 
+0

Если вы можете использовать любые клиентские клиентские базы, это упростит вашу работу. вы могли бы заглянуть [Джерси-клиент] (https://jersey.java.net/documentation/latest/client.html#d0e2562) – Lifecube

+0

Да, ваша оценка ... однако вы могли бы дать мне пример о том, как я могу передавать данные и заголовки как в конечную точку REST? – raj239

ответ

3

Хорошо я получил его решить. Мне нужно обернуть данные в жесткости формата json и опубликовать их, и это сработает.

Здесь я отправляю то же самое для других, которые планируют использовать Kii MbaaS в своих веб-приложениях помимо мобильного приложения.

package com.app.test; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.MalformedURLException; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.NameValuePair; 
import org.apache.http.client.methods.CloseableHttpResponse; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.CloseableHttpClient; 
import org.apache.http.impl.client.HttpClients; 
import org.apache.http.message.BasicNameValuePair; 

public class RestClientTest { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     CloseableHttpClient httpClient = null; 
     HttpPost httpPost = null; 
     CloseableHttpResponse response = null; 

     try { 

      httpClient = HttpClients.createDefault(); 
      httpPost = new HttpPost("https://api.kii.com/api/oauth2/token"); 

      List<NameValuePair> nvps = new ArrayList<NameValuePair>(); 
      nvps.add(new BasicNameValuePair("content-type", "application/json")); 
      nvps.add(new BasicNameValuePair("x-kii-appid", "xxxxx")); 
      nvps.add(new BasicNameValuePair("x-kii-appkey", "xxxxxxxxxxxxxx")); 

      StringEntity input = new StringEntity("{\"username\": \"dummyuser\",\"password\": \"dummypassword\"}"); 
      input.setContentType("application/json"); 
      httpPost.setEntity(input); 

      for (NameValuePair h : nvps) 
      { 
       httpPost.addHeader(h.getName(), h.getValue()); 
      } 

      response = httpClient.execute(httpPost); 

      if (response.getStatusLine().getStatusCode() != 200) { 
       throw new RuntimeException("Failed : HTTP error code : " 
         + response.getStatusLine().getStatusCode()); 
      } 

      BufferedReader br = new BufferedReader(new InputStreamReader(
        (response.getEntity().getContent()))); 

      String output; 
      System.out.println("Output from Server .... \n"); 
      while ((output = br.readLine()) != null) { 
       System.out.println(output); 
      } 
     } catch (MalformedURLException e) { 

      e.printStackTrace(); 

     } catch (IOException e) { 

      e.printStackTrace(); 

     } finally { 
      try{ 
       response.close(); 
       httpClient.close(); 
      }catch(Exception ex) { 
       ex.printStackTrace(); 
      } 
     } 

    } 
}