首页 > 解决方案 > 从android调用时缺少所需的请求正文,但与邮递员一起工作正常

问题描述

由于这种类型的问题已经被问过很多次,但我无法弄清楚,在我的情况下发生了什么。我在 Spring Boot 中创建了一个服务。虽然在邮递员中测试它工作正常,但是当我在 AsynchTask 的 android 中尝试同样的事情时,它会抛出异常。谁能帮我解决这个问题。谢谢

以下是spring boot中的服务

 @RequestMapping(path="/sellerRegistration", method = RequestMethod.POST, 
        consumes = "application/json")
public String doSellerRegistration(@RequestBody SellerModel sModel) {

    int insertCount = uDao.sellerRegistrations(sModel.getShopName(), sModel.getLocalAreaName(), sModel.getAddress(), sModel.getMobileNo(), sModel.getPassword());
    System.out.println("inside seller registration");
    if (insertCount > 0) {
        return "1";
    } else {
        return "0";
    }
}

然后我在 Android 中创建了一个方法,并从我的活动中从 AsynchTask doInBackground() 方法调用此方法。

 public static String getJSONResponse(String url, String postData){
    String result = "";
    BufferedReader reader = null;
    StringBuilder stringBuilder;
    Log.i("Rest url..", url);
    Log.i("Rest postData..", postData);
    try{
        URL myURL = new URL(url);
        HttpURLConnection myURLConnection = (HttpURLConnection)myURL.openConnection();
        myURLConnection.setRequestMethod("POST");
        myURLConnection.setRequestProperty("Content-Type", "application/json");
        myURLConnection.setRequestProperty("Content-Language", "en-US");
        myURLConnection.setUseCaches(false);
        myURLConnection.setDoInput(true);
        myURLConnection.setDoOutput(true);
        Log.i("Rest myURLConnection..", ""+myURLConnection);

        DataOutputStream wr = new DataOutputStream (myURLConnection.getOutputStream ());
        wr.writeBytes (postData);
        wr.flush ();
        wr.close ();

        reader = new BufferedReader(new InputStreamReader(myURLConnection.getInputStream()));
        stringBuilder = new StringBuilder();

        String line = null;
        while ((line = reader.readLine()) != null)
        {
            stringBuilder.append(line + "\n");
        }
        result = stringBuilder.toString();

        Log.i("REST result....", ""+result);
    } catch (Exception e) {
        Log.e("Rest service Task", e.getMessage(), e);
    }
    return result;
}

这是我如何调用的代码

  @Override
    protected String doInBackground(String... strings) {
        String shopName = "SomeShopName";
        String url = "http://192.168.43.166:2020/OnlineGroceryMarket/users/sellerRegistration?shopName="+shopName;

        String response = GroceryRestService.getJSONResponse(url, "");

        return response;
    }

这在弹簧靴案例中向我抛出了如下错误,但是当在邮递员中调用时,它工作得很好。

    2018-05-06 12:38:31.102  WARN 8204 --- [nio-2020-exec-1] 

   .w.s.m.s.DefaultHandlerExceptionResolver : Failed to read HTTP message:      org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.lang.String com.mangal.grocerymarket.user.controller.UsersController.doSellerRegistration(com.mangal.grocerymarket.user.model.SellerModel)
2018-05-06 12:38:31.102  WARN 8204 --- [nio-2020-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.lang.String com.mangal.grocerymarket.user.controller.UsersController.doSellerRegistration(com.mangal.grocerymarket.user.model.SellerModel)

标签: javaandroid

解决方案


您应该postData在写入之前对您的编码进行编码,DataOutputStream并且您应该更新以下行

myURLConnection.setRequestProperty("Content-Type", "application/json");

有了这个

myURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

如果这不起作用,请按如下方式更新您的 URL

http://192.168.43.166:2020/OnlineGroceryMarket/users/sellerRegistration/

推荐阅读