2016-03-11 68 views
0

我正在嘗試使用Apache從我的類中進行REST調用。但是,當我打印REST服務的響應時,它給出了400例外。請找到下面的代碼,讓我知道需要作出使它工作的變化,400 - Apache POST發送JSON的錯誤請求

List<NameValuePair> pickup = new ArrayList<NameValuePair>(); 
    ArrayList<HashMap> pickupItemList = new ArrayList<HashMap>(); 

    String [] productIds = prop.getArray("vproductIDs"); 
    String [] quantities = prop.getArray("vquantities"); 
    String [] tprices = prop.getArray("vtprices"); 
    String [] bprices = prop.getArray("vbprices"); 

    HashMap pickupObjMap = new HashMap<String, Object>(); 
    pickupObjMap.put("loyaltyId",prop.getString("loyaltyId")); 
    pickupObjMap.put("loyaltyFName",prop.getString("loyaltyFName")); 
    pickupObjMap.put("orderId",prop.getString("orderId")); 
    pickupObjMap.put("locationId",prop.getString("locationId")); 
    pickupObjMap.put("consignmentId",prop.getString("consignmentId")); 
    pickupObjMap.put("description",prop.getString("description")); 
    pickupObjMap.put("retailerId",prop.getString("retailerId")); 
    pickupObjMap.put("pickupType",Integer.parseInt(prop.getString("pickupType"))); 
    pickupObjMap.put("email",prop.getString("email")); 
    pickupObjMap.put("loyaltyLName",prop.getString("loyaltyLName")); 
    pickupObjMap.put("status",prop.getString("status")); 

    for(int i=0; i<productIds.length ; i++){ 
     HashMap map = new HashMap<String, Object>(); 
     map.put("sku", productIds[i]); 
     map.put("quantity", Double.parseDouble(quantities[i])); 
     map.put("totalPrice", Double.parseDouble(tprices[i])); 
     map.put("basePrice", Double.parseDouble(bprices[i])); 
     pickupItemList.add(map); 
    } 
    pickup.add(new BasicNameValuePair("pickupItemList", pickupItemList.toString())); 
    pickup.add(new BasicNameValuePair("pickupObj", pickupObjMap.toString())); 
    pickup.add(new BasicNameValuePair("ovclid", prop.getString("ovclid"))); 

     HttpPost httppost = new HttpPost("Target URL"); 
     try { 
      httppost.setEntity(new UrlEncodedFormEntity(pickup)); 
      httppost.setHeader("Content-Type", "application/json"); 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(entity.getContent())); 
      if (bufferedReader != null) { 
       int cp; 
       StringBuilder sb = new StringBuilder(); 
       while ((cp = bufferedReader.read()) != -1) { 
        sb.append((char) cp); 
       } 
       System.out.println("String Response......."+sb); 
       bufferedReader.close(); 
      } 
      System.out.println("Response......."+entity.getContent()); 
     } catch (Exception e) { 
      e.printStackTrace(); 

     } 

下面是我得到在製作REST調用的響應。

Unexpected character ('p' (code 112)): expected a valid value (number, String, array, object, 'true', 'false' or 'null') 
at [Source: [email protected]; line: 1, column: 2] 

回答

0

在「POST」中出現意外字符「P」,看起來像服務器返回html而不是json。你能檢查服務器日誌並查看任何異常嗎?什麼是返回類型 - 它應該如果您使用的是GlassFish你可能會對這個bug https://netbeans.org/bugzilla/show_bug.cgi?id=231159

+0

跌跌撞撞沒有在服務器中發現的異常被JSON

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

。此外,我試圖使用郵遞員工作找到電話,我也從服務器獲得有效的迴應。 –

+0

你可以分享你的捲曲命令或任何你調用它的方式嗎?建議先嚐試卷曲。 –

+0

嗨Sheetal, 我剛剛使用郵差測試它。請找到下面的詳細信息, 網址:http://ibmwcs.ovcdemo.com:8080/json/process/execute/CreatePickup 標題: 內容類型的應用程序/ JSON 體: { 「參數1」 :「[email protected]」 } –