Webサービス呼び出しでモバイルからサーバーにいくつかの値を渡す必要があるため、以下のようなJSON形式ですべての値を渡すことを計画しています
{
"nameservice": [
{
"id": 7413,
"name": "ask"
},
{
"id": 7414,
"name": "josn"
},
{
"id": 7415,
"name": "john"
},
{
"id": 7418,
"name": "R&R"
}
]
}
以下は私のサービスコールです
@RequestMapping("/saveName")
@ResponseBody
public String saveName(String acc)
{jsonObject = new JSONObject();
try
{
);
System.out.println(acc);
jsonObject.accumulate("result", "saved ");
}
catch(Exception e)
{
e.printStackTrace();jsonObject.accumulate("result", "Error Occured ");
}
return jsonObject.toString();
}
この方法で上記のサービスを呼び出そうとしています
localhost:8080/service/saveName?acc={ "nameservice": [ { "id": 7413, "name": "ask" }, { "id": 7414, "name": "josn" }, { "id": 7415, "name": "john" }, { "id": 7418, "name": "R&R" } ] }
しかし、出力は次のようになります
{ "nameservice": [ { "id": 7413, "name": "ask" }, { "id": 7414, "name": "josn" }, { "id": 7415, "name": "john" }, { "id": 7418, "name": "R
すべての値を取得できないのはなぜですか?
本文のJSONデータをPOST
リクエストとして渡すことをお勧めします。しかし、これをURLのパラメーターとして渡したい場合は、たとえば以下のようにURLをエンコードする必要があります。
ex jsonは:-> {"name":"ABC","id":"1"}
testurl:80/service?data=%7B%22name%22%3A%22ABC%22%2C%22id%22%3A%221%22%7D
uRLエンコードの詳細については、以下を参照してください
私はこれが後の投稿になる可能性があることを知っていますが、OPがGETを介してJSONオブジェクトを渡す方法を求めていたので(新しい回答では提案されたPOSTではなく) 。
これは、GET呼び出ししか実行できない場合に使用しますが、機能します。また、このソリューションは実質的にクロスランゲージです。
&は、このような次のパラメーターのキーワードですか?param1 = 1&param2 = 2
とても効果的にR "という名前の2番目のパラメーターを送信します。文字列をurlencode
する必要があります。POSTはオプションではありませんか?
この方法で、json Inputを認証ヘッダーとともにPOSTリクエストとして渡すことができます
public static JSONObject getHttpConn(String json){
JSONObject jsonObject=null;
try {
HttpPost httpPost=new HttpPost("http://google.com/");
org.Apache.http.client.HttpClient client = HttpClientBuilder.create().build();
StringEntity stringEntity=new StringEntity("d="+json);
httpPost.addHeader("content-type", "application/x-www-form-urlencoded");
String authorization="test:test@123";
String encodedAuth = "Basic " + Base64.encode(authorization.getBytes());
httpPost.addHeader("Authorization", security.get("Authorization"));
httpPost.setEntity(stringEntity);
HttpResponse reponse=client.execute(httpPost);
InputStream inputStream=reponse.getEntity().getContent();
String jsonResponse=IOUtils.toString(inputStream);
jsonObject=JSONObject.fromObject(jsonResponse);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return jsonObject;
}
このメソッドはJSONレスポンスを返します。同じ方法でGETメソッドを使用できます
@ RE350が提案したように、投稿の本文にJSONデータを渡すことが理想的です。ただし、GET要求のパラメーターとしてjsonオブジェクトを送信し、サーバー側のロジックでjson文字列をデコードし、オブジェクトとして使用することもできます。
たとえば、PHPを使用している場合、これを行うことができます(他の言語で適切なjsonデコードを使用します)。
サーバー要求:
http://<php script>?param1={"nameservice":[{"id":89},{"id":3}]}
サーバー内:
$obj = json_decode($_GET['param1'], true);
$obj["nameservice"][0]["id"]
出力:
89
Jsonデータ文字列をWebアドレスに送信し、メソッドpostで結果を取得します
c#で
public string SendJsonToUrl(string Url, string StrJsonData)
{
if (Url == "" || StrJsonData == "") return "";
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = StrJsonData.Length;
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
streamWriter.Write(StrJsonData);
streamWriter.Close();
var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
return result;
}
}
}
catch (Exception exp)
{
throw new Exception("SendJsonToUrl", exp);
}
}
pHPで
<?php
$input = file_get_contents('php://input');
$json = json_decode($input ,true);
?>