java - 从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)
解决方案
您应该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/
推荐阅读
- c# - 在 lambda 查询中使用“.Any()”会在 .net core EF 项目中引发错误
- c# - C#如何将对象的所有变量的值添加到列表中?
- javascript - 使用electron-builder时如何修改app.asar的文件夹结构?
- jmeter - 上传文件内容的Jmeter参数化
- package - 如何将 Quandl 包添加到 Julia
- android - 在颤振应用程序中实现本机 Kotlin 代码时出现“未解决的参考:android”错误
- java - 如果 RequestBody 中存在任何未知字段,则需要拒绝 POST/PUT 请求
- c# - 在一个 excel 文件的不同工作表上生成许多 SSRS 报告(在 c# 中)
- r - 如何聚合列表中的所有数据?
- python - 使用 tkinter 的网格布局管理器,按钮出现在错误的列中