读取从 android-async-http 传递到 JAX-RS 的参数



问题在下面以粗体显示。

我的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 的真正含义:查询参数、表单参数或请求正文。他们这边似乎是一个糟糕的文档。

相关内容

  • 没有找到相关文章

最新更新