5

Mobile アプリとは別に、Web アプリケーションの 1 つに Kii MbaaS サービスを統合する必要があります。Android SDK を使用していて、接続できました。ただし、Java ソリューションを使用する Web サイトの場合、SDK がなく、REST を使用して操作を行うように依頼されました。今、サーブレットからApacheHttpClientを使用してRESTサービスに接続することを計画していました。ドキュメントの REST 形式を以下に示します。ApacheHttpClient では、ヘッダー (-H) を HttpGet.addHeader("content-type", "application/json") として渡すことができることを知っています。ただし、データを渡す方法がわかりません(-d)。ヘッダーとともにデータを REST サービスに渡す方法に関するチュートリアル リンクまたはサンプル コードを参照して、ここで誰か助けてもらえますか?

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"}'

前もって感謝します。

- - - - - - - - - - - - - 編集 - - - - - - - - - - - - -------------------------- これは、Apache HttpClient 4.3 ライブラリを使用して接続するために作成したサンプル Java コードですが、400 のエラーが発生し続けます。 .. 誰でもアドバイスできますか?

エラー -

スレッド「メイン」の例外 java.lang.RuntimeException: 失敗しました: HTTP エラー コード: com.app.test.RestClientTest.main(RestClientTest.java:49) で 400

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();
                }
            }

        }
    }
4

1 に答える 1

3

わかりました。解決しました。データをjson形式の厳密さでラップして投稿する必要があり、それは機能します。

ここでは、Kii MbaaS をモバイル アプリとは別に Web アプリで使用することを計画している他の人のために投稿します。

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();
            }
        }

    }
}
于 2013-10-04T20:53:00.563 に答える