我正在尝试为我的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)]
导致此问题的可能原因是什么?
答案 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会知道在哪里寻找应该填充到设备中的字符串。