解决方案 »

  1.   

    1.可以考虑使用fastjson.jar  ,直接将json序列化一下就行了!我觉得应该是序列化后访问服务器的时候格式存在问题2.400错误,由于语法格式有误,服务器无法理解此请求,也就是客户端请求有问题
      

  2.   

    当然格式错误了,既然是post请求你就应该使用post的方式提交,要加上&格式,使用下面的代码,我已经注释的很清楚另外:/**
     * 发送Post请求到服务器 ,並返回請求結果
     * 
     * @param params
     *            請求參數
     * @param encode
     *            請求的編碼格式
     * @param urlString
     *            請求的URL地址
     * @return 返回讀取到的字符串
     */
    public static String submitPostData(Map<String, String> params,
    String encode, String urlString) {
    URL url = null;
    try {
    url = new URL(urlString);
    } catch (MalformedURLException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
    byte[] data = getRequestData(params, encode).toString().getBytes();// 获得请求体
    try {
    HttpURLConnection httpURLConnection = (HttpURLConnection) (url)
    .openConnection();
    httpURLConnection.setConnectTimeout(5000);// 设置连接超时时间
    httpURLConnection.setDoInput(true);// 打开输入流,以便从服务器获取数据
    httpURLConnection.setDoOutput(true);// 打开输出流,以便向服务器提交数据
    httpURLConnection.setRequestMethod("POST");// 设置以Post方式提交数据
    httpURLConnection.setUseCaches(false); // 使用Post方式不能使用缓存
    // 设置请求体的类型是文本类型
    httpURLConnection.setRequestProperty("Content-Type",
    "application/x-www-form-urlencoded");
    // 设置请求体的长度
    httpURLConnection.setRequestProperty("Content-Length",
    String.valueOf(data.length));
    // 获得输出流,向服务器写入数据
    OutputStream outputStream = httpURLConnection.getOutputStream();
    outputStream.write(data); int response = httpURLConnection.getResponseCode(); // 获得服务器的响应码
    if (response == HttpURLConnection.HTTP_OK) {
    InputStream inptStream = httpURLConnection.getInputStream();
    return getResponseResult(inptStream);
    }
    } catch (IOException e) {
    Log.d(TAG, "网络请求连接超时!");
    return null;
    }
    return null;
    }
    /**
     * 封裝請求,請求的參數使用&進行隔開,服務端通過截取&進行解析 例如:請求參數 ("userid",1)
     * ("username","admin")-->轉換後的格式爲:userid=1&username=admin
     * 如果是其他非英文字符則會自動轉換成UTF-8的格式編碼
     * 
     * @param params
     *            請求的參數,鍵/值對應
     * @param encode
     *            請求編碼
     * @return
     */
    private static StringBuffer getRequestData(Map<String, String> params,
    String encode) {
    StringBuffer stringBuffer = new StringBuffer(); // 存储封装好的请求体信息
    try {
    for (Map.Entry<String, String> entry : params.entrySet()) {
    stringBuffer.append(entry.getKey()).append("=")
    .append(URLEncoder.encode(entry.getValue(), encode))
    .append("&");
    }
    stringBuffer.deleteCharAt(stringBuffer.length() - 1); // 删除最后的一个"&"
    } catch (Exception e) {
    e.printStackTrace();
    }
    return stringBuffer;
    }
    里面请求的参数自键-值对应的,是用map或者其它
      

  3.   

    估计是没加请求头,你用了StringEntity还得告诉服务器这是JSON格式而不是普通String
    httpPost.setHeader("Content-Type", "application/json");
      

  4.   

    不是,服务器我测试了没有问题,用客户端输出的JSON去测试服务器无法理解导致的错误