Отправка объекта json на HTTP-сервер в android
Я отправляю объект JSON на HTTP-сервер, используя следующий код.
Главное, что мне нужно также отправлять значения Boolean.
public void getServerData() throws JSONException, ClientProtocolException, IOException {
ArrayList<String> stringData = new ArrayList<String>();
DefaultHttpClient httpClient = new DefaultHttpClient();
ResponseHandler <String> resonseHandler = new BasicResponseHandler();
HttpPost postMethod = new HttpPost("http://consulting.for-the.biz/TicketMasterDev/TicketService.svc/SaveCustomer");
JSONObject json = new JSONObject();
json.put("AlertEmail",true);
json.put("APIKey","abc123456789");
json.put("Id",0);
json.put("Phone",number.getText().toString());
json.put("Name",name.getText().toString());
json.put("Email",email.getText().toString());
json.put("AlertPhone",false);
postMethod.setEntity(new ByteArrayEntity(json.toString().getBytes("UTF8")));
String response = httpClient.execute(postMethod,resonseHandler);
Log.e("response :", response);
}
но показывая исключение в строке
String response = httpClient.execute(postMethod,resonseHandler);
как
org.apache.http.client.HttpResponseException: Bad Request
Может кто-нибудь мне помочь.
Ответы
Ответ 1
Плохой запрос - это сервер, говорящий, что ему не нравится что-то в вашем POST.
Единственная очевидная проблема, которую я вижу, заключается в том, что вы не сообщаете серверу, что вы отправляете его JSON, поэтому вам может потребоваться установить заголовок Content-Type, чтобы указать, что тело application/json
:
postMethod.setHeader( "Content-Type", "application/json" );
Если это не сработает, вам может потребоваться просмотреть журналы сервера, чтобы узнать, почему он не нравится ваш POST.
Если у вас нет прямого доступа к журналам сервера, вам необходимо связаться с владельцем сервера, чтобы попытаться отладить его. Возможно, формат вашего JSON немного ошибочен, отсутствует требуемое поле или какая-то другая проблема.
Если вы не можете получить доступ к владельцу сервера, вы можете попробовать использовать сниффер пакетов, например WireShark, для захвата пакетов как из вашего приложения, так и из успешного POST и сравнить эти два, чтобы попробовать и выясните, что другое. Это может быть немного похоже на поиск иглы в стоге сена, хотя, особенно для больших тел.
Если вы не можете получить пример успешного POST, то вы очень хорошо набиты, так как у вас нет ориентира.
Ответ 2
Это может быть нетехническим, но
Строковый ответ = httpClient.execute(postMethod, → resonseHandler);
В названии переменной есть орфографическая ошибка, используйте responseHandler (определенный выше)