2

我正在尝试为我的宁静 Web 服务实现发布功能。但是,每当我尝试使用我的发布客户端发布数据时,服务器总是返回 400 错误请求异常。

下面是我的帖子客户端:

public static HttpResponse post(String url, JSONObject data) throws IOException {
    HttpClient client = new DefaultHttpClient();
    StringEntity json = new StringEntity(data.toString());
    json.setContentType("application/json");
    HttpPost post = new HttpPost(url);
    post.addHeader("Content-Type", "application/json");
    post.setEntity(json);
    return client.execute(post);
}

下面是我的服务器端方法的方法标头:

@POST
@Consumes("application/json")
@Produces("text/plain")
@Path("/add")
public String addApp(@PathParam("device") String device, JSONObject json) {

每当我运行程序时,我都会从我的 post 方法中获得以下 HttpResponse:

HTTP/1.1 400 Bad Request [Server: nginx, Date: Mon, 30 Jul 2012 21:48:12 GMT, Content-Type: text/plain, Transfer-Encoding: chunked, Connection: keep-alive, Keep-Alive: timeout=5, X-Powered-By: Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1 Java/Sun Microsystems Inc./1.6)]

这个问题的一些可能原因是什么?

4

1 回答 1

1

您在服务器签名中指定了 PathParam 参数,但在 @Path 注释中没有相应的条目。如果您已经将设备字符串添加到 URL,我无法从您的客户端签名中判断,但我相信您想要这样的东西:

@POST
@Consumes("application/json")
@Produces("text/plain")
@Path("/add/{device}")
public String addApp(@PathParam("device") String device, JSONObject json) {

这是关键部分:

@Path("/add/{device}")

有了这个 Jersey 就知道在哪里寻找应该填充到设备中的字符串。

于 2012-07-31T03:34:31.317 回答