【问题标题】:400 - Bad Request on Apache POST sending JSON400 - Apache POST 发送 JSON 的错误请求
【发布时间】:2016-03-11 09:12:25
【问题描述】:

我正在尝试使用 Apache 从我的班级进行 REST 调用。但是当我打印 REST 服务的响应时,它给出了 400 异常。请找到下面的代码,让我知道需要进行哪些更改才能使其正常工作,

    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: org.glassfish.jersey.message.internal.EntityInputStream@175d5e8a; line: 1, column: 2]

【问题讨论】:

    标签: java apache rest http apache-commons-httpclient


    【解决方案1】:

    在“POST”中出现意外字符“P”,看起来服务器返回的是 html 而不是 json。您可以检查服务器日志并查看任何异常吗?返回类型是什么 - 应该是 json

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

    如果您使用 glassfish,您可能偶然发现了这个错误 https://netbeans.org/bugzilla/show_bug.cgi?id=231159

    【讨论】:

    • 服务器中没有发现异常。我也尝试使用它找到的邮递员拨打电话,并且我也从服务器获得了有效的响应。
    • 你能分享你的 curl 命令或者你怎么称呼它吗?建议先用 curl 试试。
    • 嗨 Sheetal,我刚刚使用 Postman 对其进行了测试。请在下面找到详细信息, URL : ibmwcs.ovcdemo.com:8080/json/process/execute/CreatePickup Header : Content-Type application/json Body: { "param1":"test@test.com" }
    • 你能分享给你错误的休息调用代码吗?
    • 我从 Postman 拨打电话时没有例外。但是,当我使用上述代码进行相同操作时,我得到 400(错误请求)作为响应状态代码。除此之外,它还给出了响应消息正文,意外字符('p'(代码 112)):期望一个有效值(数字、字符串、数组、对象、'true'、'false' 或 'null')读取 json 对象“pickupItemList”的“p”,而不是将其作为一个完整的字母读取。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多