问题在下面以粗体显示。
我的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;
}
我使用以下命令从安卓调用它:
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 表单来调用此方法,它可以正常工作。我从安卓设备调用它时得到的响应是:
HTTP Status 400 - Bad Request : The request sent by the client was syntactically incorrect.
任何正确方向的帮助将不胜感激。谢谢!
在客户端上添加 RequestParams 时读取它们,如下所示:
RequestParams rp = new RequestParams();
rp.add("fookey1", "foovalue1");
rp.add("fookey2", "foovalue2");
// also with rp.put(key, value);
你可以用以下方法阅读它:
public ResponseEntity dealRedeemed(String requestparams){
}
但这样做的问题是你需要解析字符串。对我来说更容易工作的是将其作为标头发送,例如:
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
}
不正确:尝试
client
.preparePut(url)
.addFormParam("lat", latitude)
.addFormParam("long", longtitude)
.build();
如此处所述 https://github.com/AsyncHttpClient/async-http-client/blob/master/client/src/main/java/org/asynchttpclient/RequestBuilderBase.java
更新:我上面的答案是错误的项目,正确的是 loopj.com。
我看了正确的项目。可能需要在服务器端而不是@FormParam上使用@QueryParam。
我无法从他们的文档中弄清楚 RequestParams 的真正含义:查询参数、表单参数或请求正文。他们这边似乎是一个糟糕的文档。