복붙노트

[SPRING] JSON 배열을 URL의 매개 변수로 전달하는 방법

SPRING

JSON 배열을 URL의 매개 변수로 전달하는 방법

웹 서비스 호출에서 모바일에서 서버로 일부 값을 전달해야한다는 요구 사항이 있으므로 아래의 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

어떤 몸이라도 왜 모든 가치를 만족시키지 못하는지 말해 줄 수 있습니까?

해결법

  1. ==============================

    1.POST 요청으로 본문의 JSON 데이터를 전달하는 것이 좋습니다. 그러나 URL의 매개 변수로 전달하려는 경우 다음과 같이 URL을 인코딩해야합니다. -

    POST 요청으로 본문의 JSON 데이터를 전달하는 것이 좋습니다. 그러나 URL의 매개 변수로 전달하려는 경우 다음과 같이 URL을 인코딩해야합니다. -

    예 json의 경우 : -> { "name": "ABC", "id": "1"}

    TESTORLE : 80 % SERVICE = DAT = % LOVE % QANEM 22 %% SABIC % 22 % S %% 22 % 22 % 22 % 22 %

    URL 인코딩에 대한 자세한 내용은 아래를 참조하십시오.

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

  2. ==============================

    2.이것은 나중에 게시 될 수 있지만 새로운 방문자의 경우 OP가 GET을 통해 JSON 객체를 전달할 방법을 요청했기 때문에 새로운 솔루션에 대한 해결책을 공유 할 것입니다 (다른 답변에서 제안 된 POST가 아님).

    이것은 나중에 게시 될 수 있지만 새로운 방문자의 경우 OP가 GET을 통해 JSON 객체를 전달할 방법을 요청했기 때문에 새로운 솔루션에 대한 해결책을 공유 할 것입니다 (다른 답변에서 제안 된 POST가 아님).

    나는 GET 호출 만 할 수있는 몇몇 경우에 이것을 사용했고 작동한다. 또한이 솔루션은 실제 언어가 아닙니다.

  3. ==============================

    3.&는 다음 매개 변수에 대한 키워드입니다. ur? param1 = 1 & param2 = 2

    &는 다음 매개 변수에 대한 키워드입니다. ur? param1 = 1 & param2 = 2

    그래서 효과적으로 R이라는 두 번째 매개 변수를 보냅니다. 문자열을 urlencode해야합니다. POST 옵션이 아닌가요?

  4. ==============================

    4.이런 식으로 인증 헤더와 함께 json Input을 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 메서드를 사용할 수 있습니다.

  5. ==============================

    5.@ RE350은 게시물에서 JSON 데이터를 전달하는 것이 이상적이라고 제안했습니다. 그러나 여전히 json 객체를 GET 요청의 매개 변수로 보내고 json 문자열을 서버 측 로직에서 디코딩하여 객체로 사용할 수 있습니다.

    @ RE350은 게시물에서 JSON 데이터를 전달하는 것이 이상적이라고 제안했습니다. 그러나 여전히 json 객체를 GET 요청의 매개 변수로 보내고 json 문자열을 서버 측 로직에서 디코딩하여 객체로 사용할 수 있습니다.

    예를 들어, PHP를 사용하고 있다면 다음과 같이 할 수 있습니다 (다른 json 디코딩을 다른 언어로 사용하십시오) :

    서버 요청 :

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

    서버에서 :

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

    출력 :

    89
    
  6. ==============================

    6.Json 데이터 문자열을 웹 주소로 보내고 메소드 post를 사용하여 결과를 얻습니다.

    Json 데이터 문자열을 웹 주소로 보내고 메소드 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);
    
    ?>
    
  7. from https://stackoverflow.com/questions/27577922/how-to-pass-a-json-array-as-a-parameter-in-url by cc-by-sa and MIT license