我们如何使用Jersey在请求中发送未注释的方法参数?

时间:2014-12-23 00:28:46

标签: java rest jersey jax-rs jersey-client

今天当我浏览Jersey文档时,我发现了以下声明

 Unlike method parameters that are associated with the extraction of request parameters, 
 the method parameter associated with the representation being consumed does not require 
 annotating.  A maximum of one such unannotated method parameter may exist since there 
 may only be a maximum of one such representation sent in a request.

我是JAX-RS的新手,因此我们在请求中发送这样一个参数的方式不太清楚(我没有找到任何具体的例子来更好地理解)

从上面的陈述我理解的是,我们可以有一些资源方法,如

 @Path("restful")
 public class MyResource{
   ...
   @GET
   @Produces("application/text")
   public String getStringResp(String param){
      ...
      return "some value";
   }
   ....
 }

这里我们没有使用任何带注释的参数,如路径,矩阵,查询或任何其他参数。

现在我的问题是,在客户端,我们如何将值发送到方法参数" param"?我们可以在" webtarget"上使用像queryparam()等api方法。或者" invocationBuilder"如果param被分别注释,则发送请求参数。事实并非如此。

请帮助我理解这个?

提前致谢

2 个答案:

答案 0 :(得分:1)

首先要理解的是,请求主要有两个部分,正文和标题。你发布的文档是什么,是一个无注释的参数,最终是请求的主体。

您通常不会向任何实体发送GET次请求,但对于PUTPOST,有put(Entity<?> entity)post(Entity<?> entity)Ivocation.Builder继承自SyncInvoker

Entity类具有静态方法,我们可以从中创建实体主体。例如

                        // application/json data
target.request().post(Entity.json(jsonStringDataOrPojo));

                        // application/xml data
target.request().post(Entity.xml(xmlStringDataOrPojo));

                        // text/plain data
target.request().post(Entity.entity(stringData, MediaType.TEXT_PLAIN));

                        // text/plain data 
target.request().post(Entity.text(stringData));

在您的情况下,使用String,您实际上可以发送其中任何一个。由于您尚未在资源方法上指定@Consumes注释,因此它可以是纯文本xml或json。对于xml和json,您只需以原始格式获取数据。

如果你有

@POST
@Consumes(MediaType.TEXT_PLAIN)
public Response postString(String param){

然后你需要发送纯文本,即上面最后一个例子


答案 1 :(得分:-1)

你真的应该使用@PathParam(“param”)方法param,比如@PathParam(“param”)param 如果您想了解更多,我建议您查看源代码。