发布json数据时出错

时间:2012-03-02 19:30:58

标签: android json http-headers

我正在尝试发布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 个答案:

答案 0 :(得分:3)

尝试删除

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

线。看起来你要两次添加内容类型标题,服务器有一些问题。

答案 1 :(得分:2)

在我看来,您要将Content-Type标题设置两次。一次使用字符串文字,最后一次使用HTTP.CONTENT_TYPE

我在项目中解决这个问题的方法是将StringEntity扩展为完全相同,但将Content-Type设置为application/json除外。这样,我再也没有想过了。