1

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

4 Answers 4

2

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...!!!

Sign up to request clarification or add additional context in comments.

Comments

1

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 '

1 Comment

@Sam-In-TechValens I've edited my answer. Check it again. Anyways you should use the answer provided by yanchenko, as get parameters have a character limitation, while POST doesn't.
0

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

Comments

0

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

1 Comment

Yeah... thats what I have done... answered already .. thanks :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.