自動WADL生成の優れた機能を利用して、RESTfulAPIの実装にJerseyを使用しています。
例として、メソッドがあります
@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>
私の問題は、Jerseyでそれを有効にすることです。関連するドキュメントが見つからず、パラメータのタイプをからに変更すると、この機能が自動的に機能すると想定した場合は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();
}
}
ここで何が欠けていますか?前もって感謝します。