Java 未提取查询参数-JAX-RS和Jersey

Java 未提取查询参数-JAX-RS和Jersey,java,rest,jersey,jax-rs,jersey-2.0,Java,Rest,Jersey,Jax Rs,Jersey 2.0,我正在使用Jersey 2.19实现REST API,但在使用@QueryParam从POST请求提取查询参数时遇到了困难,即使调用了我的资源方法 这是我的资源方法: @POST @Produces(MediaType.TEXT_PLAIN) public Response test(@QueryParam("test-param") String testParam) { String response = "testParam is: " + testParam + "\n";

我正在使用Jersey 2.19实现REST API,但在使用@QueryParam从POST请求提取查询参数时遇到了困难,即使调用了我的资源方法

这是我的资源方法:

@POST
@Produces(MediaType.TEXT_PLAIN)
public Response test(@QueryParam("test-param") String testParam) 
{
    String response = "testParam is: " + testParam + "\n";
    return Response.status(Response.Status.OK).entity(response).build();
}
我使用cURL提交HTTP POST请求,如下所示:

curl -X POST http://192.168.0.2:8080/myApp/test --data test-param=Hello
返回的值始终为空

我做错了什么?

curl中的--data将提供整个文本
test param=Hello
。正确的申请方式是:


curl-X柱http://192.168.0.2:8080/myApp/test?test-param=你好

尝试使用curl-xpost'192.168.0.2:8080/myApp/test?test param=Hello'

-d、 --数据


(HTTP)将POST请求中的指定数据发送到HTTP服务器,其方式与浏览器在用户填写HTML表单并按下提交按钮时的方式相同。这将导致curl使用内容类型application/x-www-form-urlencoded将数据传递给服务器。与-F,--form相比。

尝试使用curl-X POST'',因为
--data
选项将数据作为application/X-www-form-urlencoded发送,所以您应该使用。JAX-RS规范声明@QueryParam“指定从URI查询参数提取方法参数、类字段或bean属性的值。”因此,即使查询参数在技术上可以驻留在URI查询部分或请求体中,@QueryParam只从URI本身读取查询参数。使用POST时,您可以发送的不仅仅是参数,还可以发送全文/二进制的正文。。。例如,一个完整的JSON/XML对象—您不会将其作为查询参数包含。如果您将签名更改为
公共响应测试(@QueryParam(“test param”)String testParam,String body)
并使用您主要发送的请求-您将看到后面的任何内容-数据将位于
body