当前位置: 首页 > 知识库问答 >
问题:

从android调用时,所需的请求正文缺失,但与邮递员配合良好

凌永逸
2023-03-14

因为这种类型的问题已经被问了很多次,但我不知道,在我的情况下发生了什么。我已经在Spring启动中创建了一个服务。在邮递员中测试时,它工作正常,但当我在AsynchWG的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;
    }

这是扔给我的错误,就像下面在Spring启动的情况下,但当在邮递员调用它的工作非常好。

    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)

共有2个答案

阴飞星
2023-03-14

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

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/
颛孙信厚
2023-03-14

也许试着改变

wr.writeBytes (postData);

wr.writeBytes (postData.getBytes("UTF-8"));
 类似资料:
  • 我想通过邮递员上传一个图像到我的Rest API。我使用的是Spring Boot框架。以下是屏幕截图: 我也没有设置任何头部,因为我在其他堆栈溢出答案中发现,它给出了多部分边界错误。 下面是我的控制器代码: 现在,我将使用一个产品对象,该对象内部包含一个定义为Byte[]数组的图像。我把它作为字符串和图像分开作为多部分文件。 下面是我定义的产品类属性: 因为,我使用的是spring boot,这

  • 我有一个邮递员预请求脚本添加一个HMAC密钥到一个请求。除非身体中有一个环境变量,否则这种方法很有效。所以如果我有下面的身体 当发送请求时将键值设置为sample时,正文包含以下内容 这是我所期望的。但是,在访问预请求脚本中的请求正文时, 我得到以下信息 我怎样才能获得变量被替换的主体,以便它是将被发送到服务器的内容?

  • 我有一个 POST 请求,用于验证请求正文中的文本/csv 文件。请求在邮递员中成功运行:返回 HTTP 代码 200。Postman 控制台中的请求正文填充了文件路径和名称,即 src:“/Users/username/Downloads/demo_file.csv”,但是当导出集合时,请求中的文件值为空。见下文。 问题。为什么它是空的,这是一个错误/已知问题吗? 作为一个快速测试,我将文件添加

  • 问题内容: 将JSON数据从JSP传递到ResponseBody中的控制器时出错。 Ajax电话: 控制器: AppConfig.java @豆 请帮助我摆脱困境。我正在使用Spring 4,Jakson 2.3.0 如果我尝试POST请求,它将给出:org.springframework.web.HttpRequestMethodNotSupportedException:请求方法’POST’不

  • 我正在尝试设置邮递员预请求,以便在向服务发出每个请求之前获取 OAuth 令牌。 我尝试遵循与此相关的各种示例和指南,每个示例和指南似乎都非常简单,尽管由于预请求脚本失败,我的脚本仍然存在问题。 恐怕这在某种程度上与这样一个事实有关,即我需要调用的endpoint来获取令牌是在超文本传输协议上,而不是在https上,因为在Postman控制台中,我总是收到对同一个url的两个单独的请求,一个在ht

  • 我创建了基于Web的应用程序示例:Angular的前端和spring boot mer客户的后端)Angular URL:http://localhost:4200/spring boot URL:http://localhost:9020/(REST:http://localhost:9020/API/) . . 应用程序.属性: > server.port=9020 spring.dataso