2014-12-20 20 views
11

Ho un requisito per passare alcuni valori da cellulare a server in una chiamata di servizio Web e quindi sto pianificando di passare tutti i valori in formato JSON come il seguenteCome passare un array JSON come parametro nell'URL

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

Quello che segue è il mio servizio di chiamata

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

sto provando a chiamare il servizio di cui sopra in questo modo

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

Ma l'uscita è come questo

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

Qualsiasi organismo può dirmi il motivo per cui io non sono sempre tutti i valori per favore?

+0

Perché non passare i dati nel corpo? – bjoernhaeuser

+0

@bjoernhaeuser puoi guidarmi come passare nel corpo? – rocking

+0

Cosa usi per fare la richiesta? Questo non è nel codice sopra. – bjoernhaeuser

risposta

21

Vorrei suggerire di passare i dati JSON nel corpo come una richiesta POST.Ma se si vuole ancora passare questo parametro come URL, sarà necessario codificare l'URL come di seguito solo per esempio: -

per ex json è: ->{"name":"ABC","id":"1"}

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

per ulteriori informazioni sulla codifica URL riferiscono sotto

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

+1

Puoi dirmi come passare usando il POST – rocking

+0

che cosa stai usando per il tuo front-end, intendo per fare una richiesta al servizio di primavera? è AJAX o JAVA o cosa ?? – RE350

+0

Questa è una chiamata al servizio Web. I ragazzi Android dovranno inviarmi i dati e io devo conservare nel DB. – rocking

2

& è una parola chiave per il prossimo parametro come questo ur? Param1 = 1 & param2 = 2

così efficacemente si invia un secondo parametro denominato R". Si dovrebbe URLEncode la stringa. Non è Inserisci un opzione?

+0

Come posso POST nei servizi web e come URLEncode la stringa? – rocking

1

È possibile passare il vostro ingresso JSON come una richiesta POST con un'intestazione di autorizzazione in questo modo

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:[email protected]"; 
      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; 


    } 

Questo metodo restituirà una risposta JSON. Allo stesso modo è possibile utilizzare il metodo GET

0

Come @ RE350 suggerito il passaggio dei dati JSON nel corpo nel post sarebbe l'ideale. Tuttavia, è comunque possibile inviare l'oggetto json come parametro in una richiesta GET, decodificare la stringa json nella logica lato server e utilizzarla come oggetto.

Ad esempio, se si è in php si potrebbe fare questo (utilizzare la decodifica JSON appropriata in altre lingue):

richiesta Server:

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

Nel server:

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

out put:

89 
0

Invia stringa di dati JSON per un indirizzo web e ottenere un risultato con metodo POST

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

in PHP

<?php 

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

?> 
3

So che questo potrebbe essere un post successivo, ma, per i nuovi visitatori condividerò la mia soluzione, poiché l'OP chiedeva un modo per passare un oggetto JSON tramite GET (non il POST come suggerito in altre risposte).

  1. Prendere l'oggetto JSON e convertirlo in stringa (JSON.stringify)
  2. prendere la stringa e codificare in Base64 (si possono trovare alcune informazioni utili su questo here
  3. aggiungerlo all'URL e effettuare la chiamata GET
  4. invertire il processo. decodificare e analizzare in un oggetto

ho usato questo in alcuni casi in cui posso solo fare ricevere telefonate e funziona. Inoltre, questa soluzione è praticamente langu croce età.

Problemi correlati