将JSONObject发布到Restful Web Service时的java - 400

时间:2012-07-30 21:50:42

标签: java json web-services rest http-status-code-400

我正在尝试为我的restful Web服务实现post功能。但是,每当我尝试使用post客户端发布数据时,服务器总是返回400 Bad Request Exception。

以下是我的帖子客户端:

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)]

导致此问题的可能原因是什么?

1 个答案:

答案 0 :(得分: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会知道在哪里寻找应该填充到设备中的字符串。