Domanda

I am working with JSON Restful web serivces where I have to pass JSON object in the Service URL. I have created the JSON object successfully but getting exception when my URL created the HTTP connection with the SERVER.

Below I have mention my URL:

 http://72.5.167.50:8084/UpdateProfileInfo?{"ProfileEditId":"917","ContactsEmail":[{"Email":"dsfs","ContactId":""}],"ContactsPhone":[{"CountryId":"+1","Type":"2","Phone":"345345"}],"ProfileId":"290","LastName":"demo","GroupId":"1212","Title":"sdf","City":"dsf","TemplateId":"1212","State":"dsf","AuthCode":"9bcc6f63-2050-4c5b-ba44-b8103fbc377a","Address":"sdf","FirstName":"demo","ContactId":"","Zip":"23","Company":"tv"}

Getting java.lang.IllegalArgumentException: Illegal character in query in code :

int TIMEOUT_MILLISEC = 100000; // 1000 milisec = 1 seconds
int SOCKET_TIMEOUT_MILISEC = 120000; // 2 minutes
HttpParams httpParams = new BasicHttpParams();
HttpConnectionParams.setConnectionTimeout(httpParams, TIMEOUT_MILLISEC);
HttpConnectionParams.setSoTimeout(httpParams, SOCKET_TIMEOUT_MILISEC);
HttpClient client = new DefaultHttpClient(httpParams);
HttpPost request = new HttpPost(url);
HttpResponse response = client.execute(request);
responseString = request(response);

Please suggest me If I am doing something wrong with my URL.

*EDITED:*Tried with a key still getting Exeception:

http://72.5.167.50:8084/UpdateProfileInfo?profileinof={"ProfileEditId":"917","ContactsEmail":[{"Email":"sdf","ContactId":""}],"ContactsPhone":[{"CountryId":"+1","Type":"2","Phone":"345345345"}],"ProfileId":"290","LastName":"demo","GroupId":"1212","Title":"dsf","City":"dsf","TemplateId":"1212","State":"dsf","AuthCode":"d968273a-0110-461b-8ecf-3f9c456d17ac","Address":"dsf","FirstName":"demo","ContactId":"","Zip":"23","Company":"tv"}
È stato utile?

Soluzione

There is different format of HTTP request that we needed to make for this kind of REQUEST.

I have mention my code below for this.

public JSONObject getJSONObject(){


    return jsonObj;
    }

ABove method returns me a JSON String which is passed in the below method.

public static HttpResponse makeRequest(String url) throws Exception 
{
    //instantiates httpclient to make request
    DefaultHttpClient httpclient = new DefaultHttpClient();

    //url with the post data
    HttpPost httpost = new HttpPost(url);

    //convert parameters into JSON object
    JSONObject holder = getJSONObject();
    //passes the results to a string builder/entity
    StringEntity se = new StringEntity(holder.toString());
    //sets the post request as the resulting string
    httpost.setEntity(se);
    httpost.setHeader("Accept", "application/json");
    httpost.setHeader("Content-type", "application/json");

    //Handles what is returned from the page 
    ResponseHandler responseHandler = new BasicResponseHandler();
    return httpclient.execute(httpost, responseHandler);
}

Stack post helped me for doing this task...!!!

Altri suggerimenti

The IP is not correct.

IP is formed with 4 bytes. Every byte is a value from 0 to 255, can't be 7 thousand.

http://7232.25.1617.50:1084

Edit: Okay, you edited your question. You're sending a JSON as parameter. But this parameter has no "key".

Should be:

/UpdateProfileInfo?info={"ProfileEditId":"917",[.......]

Edit: I think this should be like this:

/UpdateProfileInfo?info="{'ProfileEditId':'917',[.......]}"

Notice that the value is surrounded by ", and the inner " are replaced now by '

Probably the issue is that you are trying to POST a JSON object as an url param.
If it really has to be an url param, that it has to be urlencoded.
If it rather should be a normal POST request, I's suggest to use a high level helper:

new RESTClient2(ctx).post("http://72.5.167.50:8084", jsonObject);

I can see a need to work with POJOs , converting them to JSON strings and conveying that string info over HTTP. There are lots of good android/java/apache/volley type libs that permit that.

However, i do not understand, in fact i disagree with your requirement to use GET and the URL parms for transport of your JSON string?

Its really easy to do the following:

POJO -> to JSON -> toString -> to http.string.entity -> POST

Why not re-examine your architecture and consider using POST not GET.

Then its easy , 2 step:

see example "request.setEntity( ... "

your code will look like this:

httpPost.setEntity(new StringEntity(pojo.toJSON().toString()));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top