为@InjectParam 生成 WADL 请求参数

Posted

技术标签:

【中文标题】为@InjectParam 生成 WADL 请求参数【英文标题】:Generating WADL request parameters for @InjectParam 【发布时间】:2012-05-01 21:59:44 【问题描述】:

我正在使用 @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】:

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

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

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

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

【讨论】:

这确实有效,但缺点是虚拟参数(value1)会使开发人员感到困惑,因为它们从未使用过。此外,客户端必须手动将值从 POJO 传输到方法调用:Query actual = SandboxApi.sandbox().query().getAsQuery(expected.value1);

以上是关于为@InjectParam 生成 WADL 请求参数的主要内容,如果未能解决你的问题,请参考以下文章

从WADL url生成java类(模型)

jmeter发送soap请求

带有 JSON 表示语法的 WADL

IBM ACE(新)- 调用在 WADL 或 API 中定义的 Rest API,没有 swagger 定义

CXF WADL 缺少复杂对象的详细信息

REST/JSON:如何生成示例请求?如何公开 API?