Cómo pasar una matriz JSON como un parámetro en la URL

Tengo un requisito para pasar algunos valores de móvil a servidor en una llamada de servicio web, por lo que estoy planeando pasar todos los valores en formato JSON como el siguiente

{ "nameservice": [ { "id": 7413, "name": "ask" }, { "id": 7414, "name": "josn" }, { "id": 7415, "name": "john" }, { "id": 7418, "name": "R&R" } ] } 

La siguiente es mi llamada de servicio

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

Estoy tratando de llamar al servicio anterior de esta manera

 localhost:8080/service/saveName?acc={ "nameservice": [ { "id": 7413, "name": "ask" }, { "id": 7414, "name": "josn" }, { "id": 7415, "name": "john" }, { "id": 7418, "name": "R&R" } ] } 

Pero el resultado es así

 { "nameservice": [ { "id": 7413, "name": "ask" }, { "id": 7414, "name": "josn" }, { "id": 7415, "name": "john" }, { "id": 7418, "name": "R 

¿Puede algún cuerpo decirme por qué no obtengo todos los valores, por favor?

Sugeriría pasar los datos JSON en el cuerpo como una solicitud POST Pero si todavía desea pasar esto como un parámetro en la URL, tendrá que codificar su URL como se muestra a continuación, por ejemplo:

para ex json es: -> {"name":"ABC","id":"1"}

testurl:80/service?data=%7B%22name%3A%22ABC%22,%22id%22%3A%221%22%7D

Para obtener más información sobre la encoding de URL, consulte a continuación

https://en.wikipedia.org/wiki/Percent-encoding

Sé que podría ser una publicación posterior, pero, para los visitantes nuevos, compartiré mi solución, ya que el OP estaba pidiendo una forma de pasar un objeto JSON a través de GET (no POST como se sugiere en otras respuestas).

  1. Tome el objeto JSON y conviértalo en una cadena (JSON.stringify)
  2. Tome la cadena y codifíquela en Base64 (aquí puede encontrar información útil sobre esto)
  3. Añádalo a la URL y realice la llamada GET
  4. Invierte el proceso decodificar y analizar en un objeto

Lo he usado en algunos casos en los que solo puedo hacer llamadas GET y funciona. Además, esta solución es prácticamente un lenguaje cruzado.

& es una palabra clave para el siguiente parámetro como este ur? param1 = 1 & param2 = 2

de modo que envíes un segundo parámetro llamado R “. Deberías urlnear tu cadena. ¿No es POST una opción?

Puede pasar su Entrada json como una solicitud POST junto con el encabezado de autorización de esta manera

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

Este método devolverá una respuesta json. De la misma manera puede usar el método GET

Como @ RE350 sugirió pasar los datos JSON en el cuerpo en la publicación sería ideal. Sin embargo, aún podría enviar el objeto json como parámetro en una solicitud GET, decodificar la cadena json en la lógica del lado del servidor y usarla como un objeto.

Por ejemplo, si está en php puede hacer esto (use la deencoding json apropiada en otros idiomas):

Solicitud del servidor:

 http://?param1={"nameservice":[{"id":89},{"id":3}]} 

En el servidor:

 $obj = json_decode($_GET['param1'], true); $obj["nameservice"][0]["id"] 

fuera puesto:

 89 

Enviar cadena de datos Json a una dirección web y obtener un resultado con la publicación de método

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

en PHP

 < ?php $input = file_get_contents('php://input'); $json = json_decode($input ,true); ?>