我们正在使用 Jersey 实现 RESTful API,利用其自动 WADL 生成的酷特性。
举个例子,我们有方法
@GET
@Path("/{id}/{attribute}")
@Produces(MediaType.APPLICATION_JSON)
public Object getAttributeByID(@PathParam("id") long id, @PathParam("attribute") String attribute) {
....
}
这会在 WADL 中生成以下片段:
<param type="xs:string" style="template" name="attribute:.*"/>
属性可以是name
, type
,size
我们不仅要在运行时验证值,还要在生成的 wadl 中显示它 根据这个文档,应该通过<option>
在 内部生成几个标签来支持这样的功能<param>
,即我期待如下内容:
<param type="aws:Attributes" style="template" name="attribute">
<option value="name"/>
<option value="type"/>
<option value="size"/>
</param>
我的问题是用泽西岛启用它。如果找不到相关文档并假设如果我将参数类型从String
更改enum
为此功能将自动工作,因此我将方法签名更改为:
@Path("/{id}/{attribute}")
@Produces(MediaType.APPLICATION_JSON)
public Object getAttributeByID(@PathParam("id") long id, @PathParam("attribute") Attribute attribute) {
....
}
在哪里
public enum Attribute {
name, type, size
}
但是 Jersey 仍然会生成<param>
不带选项的标签,并且参数的类型仍然是xs:string
.
我试图在 Jersey 的代码中找到它并找到com.sun.research.ws.wadl.Option
带有相关 JAXB 注释的类,所以它似乎是相关的,但我不知道如何使它工作。我想问题出在WadlGeneratorConfig
.
这是我们的泽西定义的相关部分web.xml
<filter>
<filter-name>REST-API</filter-name>
<filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class>
................
<init-param>
<param-name>com.sun.jersey.config.property.WadlGeneratorConfig</param-name>
<param-value>com.mycompany.resource.OurWADLGenerator</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.mycompany</param-value>
</init-param>
</filter>
其中OurWADLGenerator
代码是:
public class OurWADLGenerator extends WadlGeneratorConfig {
@Override
public List<WadlGeneratorDescription> configure() {
return generator(WadlGeneratorApplicationDoc.class)
.prop("applicationDocsStream", "application-doc.xml")
.generator(WadlGeneratorResourceDocSupport.class)
.prop("resourceDocStream", "resourcedoc.xml").descriptions();
}
}
我在这里想念什么?提前致谢。