Отправка объекта 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 (определенный выше)