为@InjectParam生成WADL请求参数

时间:2012-05-01 21:59:44

标签: rest jersey jax-rs wadl

我使用@InjectParam将查询参数注入到JAX-RS资源中,该资源包含Jersey 1.12实现上的@QueryParam注释字段。

关于资源:

@Path("query")
@GET
@Produces(MediaType.APPLICATION_XML)
public Query queryParam(@InjectParam Query query) {
    return query;
}

在接收注入参数的pojo中,我有一些JAXB和JAX-RS注释。

 @XmlRootElement
 public class Query {
    @QueryParam("value1")
    String value1;
 }

来自REST客户端的简单测试:

  

http://localhost:8888/sandbox/query?value1=hello3

产生正确的结果:

<query>
  <value1>hello3</value1>
</query>

这很好,但我也使用wadl-maven-plugin生成一个使用WADL文件生成客户端代码的客户端。如果@QueryParam注释包含在资源方法参数中,则WADL文件不包含必需的request parameters。随后我的客户端被生成为不接受任何参数:

SandboxApi.sandbox().query().getAsQuery()

而不是接受填充的生成客户端pojo。

Query queryClient = new Query();
queryClient.setValue1("hello3");
SandboxApi.sandbox().query().getAsQuery(queryClient);

任何人都知道我可以在Jersey资源上添加一个魔术注释,它会产生一个具有正确信息的WADL,因此Wadl2Java可以生成一个接受POJO并随后将相应字段作为查询参数发送的客户端?

1 个答案:

答案 0 :(得分:0)

在泽西岛工作的一些优秀人员(通过私人谈话)提供的回复:

@Path("query")
@GET
@Produces(MediaType.APPLICATION_XML)
public Query queryParam(@QueryParam("value1") String value1, 
                        @InjectParam Query query) {
   return query; 
}

查询参数“value1”应出现在生成的WADL中。

内置的WADL生成器不包含对这些情况的支持,我不确定它是否会很快得到支持。