我正在尝试在我的Android应用中发布资源。 GET
没有任何问题。在我的Android代码段末尾执行POST
时,response.getStatusLine().getStatusCode()
会返回404(见下文)
My Jersey网络服务方法如下所示:
@POST
@Path("/create")
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public Response create(@FormParam("name") String name,
@FormParam("description") String description) throws IOException {
User user = new User();
user.setName(name);
user.setDescription(description);
// store object in database...
return Response.status(Status.OK).build();
}
Android应用程序中的代码:
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("**my-url**/create");
ArrayList<NameValuePair> paramspost = new ArrayList<NameValuePair>();
paramspost.add(new BasicNameValuePair("name", "My name"));
paramspost.add(new BasicNameValuePair("description", "My description"));
try {
httpPost.setHeader("Content-Type",
"application/x-www-form-urlencoded;charset=UTF-8");
httpPost.setEntity(new UrlEncodedFormEntity(paramspost, "UTF-8"));
HttpResponse response = httpClient.execute(httpPost);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
状态代码最后是404,我的数据库中没有任何内容。我的代码出了什么问题?
答案 0 :(得分:0)
从我所看到的,你从未定义过请求方法。
httpPost.setRequestMethod("POST");
这可以解决您的问题。
答案 1 :(得分:0)
在您的请求中,您指定了Content-Type:“application / x-www-form-urlencoded; charset = UTF-8”,但是在您的资源中,您使用了“MediaType.APPLICATION_FORM_URLENCODED”,这是我没有相信的charset扩展。这可能会导致麻烦,因此找不到可以消耗您请求的资源。尝试从请求标题中省略charset属性。
Content-Type中的jersey和charset属性也存在问题。看看here
答案 2 :(得分:0)
事实证明,我的更改未正确部署到Tomcat
。我删除了Tomcat
文件夹中的所有内容并再次部署(看起来像通过eclipse创建战争并不总是正确取消部署)。
这意味着我的问题中提供的代码可以正常工作。我发现删除指定的内容类型并没有任何区别。