问题以粗体显示如下。
我的jax-rs中有一个PUT方法,代码如下:
@PUT
@Path("{id}/url.json")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public ResponseEntity dealRedeemed(@PathParam("id") long id,
@FormParam("lat") long lat,
@FormParam("lng") long lng) {
ResponseEntity entity = new ResponseEntity();
entity.addField("lat", lat); // THIS WORKS WHEN POSTING FROM A FORM
entity.addField("lng", lng); // THIS WORKS WHEN POSTING FROM A FORM
return entity;
}
我使用以下方式从Android调用它:
AsyncHttpClient client = new AsyncHttpClient();
RequestParams params = new RequestParams();
params.put("lat", latitude);
params.put("lon", longitude);
client.put(getAbsoluteUrl(id+"/url.json"), params, responseHandler);
当通过Android调用PUT方法时,如何访问JAX-RS中的参数?如果我使用HTML表单调用此方法,它可以正常工作。我从Android设备调用它时得到的响应是:
HTTP Status 400 - Bad Request : The request sent by the client was syntactically incorrect.
非常感谢任何正确方向的帮助。谢谢!
答案 0 :(得分:0)
要像这样将RequestParams添加到客户端时阅读它们:
RequestParams rp = new RequestParams();
rp.add("fookey1", "foovalue1");
rp.add("fookey2", "foovalue2");
// also with rp.put(key, value);
您可以通过以下方式阅读它:
public ResponseEntity dealRedeemed(String requestparams){
}
但是,这样做的问题是您需要解析String。对我来说,更容易工作的是将其作为标头发送,例如:
client.addHeader("fookey1", "foovalue1");
client.addHeader("fookey2", "foovalue2");
client.post(url, myHandler);
阅读方式如下:
public ResponseEntity dealRedeemed(@HeaderParam("fookey1") String foovalue1,
@HeaderParam("fookey2") String foovalue2){
//So now you can use the variables independently
}
答案 1 :(得分:-2)
不正确:尝试
client
.preparePut(url)
.addFormParam("lat", latitude)
.addFormParam("long", longtitude)
.build();
更新:我上面的答案是错误的项目,正确的是loopj.com。
我看过正确的项目。可能需要在服务器端使用@QueryParam而不是@FormParam。
我无法从他们的文档中找出RequestParams的真正含义:查询参数,形式参数或请求正文。好像他们身边的文件很差。