Ошибка при публикации данных JSON - PullRequest
1 голос
/ 02 марта 2012

Я пытаюсь опубликовать объект json

{"venue":"places, US"}

используя приведенный ниже код-

HttpClient client = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(client.getParams(), 30000);
HttpResponse response;
try {
     HttpPost post = new HttpPost(url);
     StringEntity se = new StringEntity(json.toString());
     se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
     post.setEntity(se);
     post.setHeader("Accept", "application/json");
     post.setHeader("Content-type", "application/json");
     response = client.execute(post);

} catch (Exception e) {
    Log.e("Client", "sendJson", e);
}

Однако я получаю сообщение об ошибке ниже сервера-

{"description":"Invalid token character ',' in token \"json, application/json\"","errorCode":2000}

Какова причина этой ошибки с сервера. Это из-за некоторых настроек заголовка на стороне сервера или из-за проблемы с кодом запроса, который я вставил выше.

Изменить: Похоже, эта ошибка происходит из-за установки типа контента 2 раза. После удаления ниже строки

se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));

ошибка исчезла.

Но когда я удаляю только строку ниже, а не строку, написанную выше, ошибка не устраняется.

post.setHeader("Content-type", "application/json");

Почему удаление только первой строки работает, а когда я удаляю 2-ю, одна ошибка все еще существует, поскольку оба устанавливают тип содержимого.

Также я использовал этот код с обеими строками в других проектах, и он работал в них безо всякой ошибки. Похоже, проблема на стороне сервера, какие настройки на сервере могли быть причиной этой проблемы.

Спасибо

Ответы [ 2 ]

3 голосов
/ 02 марта 2012

Попробуйте удалить

post.setHeader("Content-type", "application/json");

линия. Похоже, вы добавляете заголовок типа контента дважды, и у сервера есть некоторые проблемы с этим.

2 голосов
/ 02 марта 2012

Мне кажется, что вы устанавливаете заголовок Content-Type дважды.Один раз со строковым литералом в конце и один раз в начале с HTTP.CONTENT_TYPE.

В моем проекте я решил это путем расширения StringEntity, чтобы он вел себя точно так же, за исключением установки егоContent-Type до application/json.Таким образом, мне больше никогда не приходилось думать об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...