Android HttpPost到Jersey Web服务返回404

时间:2014-09-08 14:54:42

标签: java android jersey http-post jax-rs

我正在尝试在我的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,我的数据库中没有任何内容。我的代码出了什么问题?

3 个答案:

答案 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创建战争并不总是正确取消部署)。

这意味着我的问题中提供的代码可以正常工作。我发现删除指定的内容类型并没有任何区别。