为@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 请求参数的主要内容,如果未能解决你的问题,请参考以下文章