[更新 - 示例是相同的,但我已经改写了我的警告]
可以办到。尝试以下操作:
import com.sun.jersey.api.model.AbstractResource;
import com.sun.jersey.api.model.AbstractSubResourceMethod;
import com.sun.jersey.server.impl.modelapi.annotation.IntrospectionModeller;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
public class AnimalsTest
{
public static void main(String [] args)
{
AbstractResource resource = IntrospectionModeller.createResource(AnimalResource.class);
System.out.println("Path is " + resource.getPath().getValue());
String uriPrefix = resource.getPath().getValue();
for (AbstractSubResourceMethod srm :resource.getSubResourceMethods())
{
String uri = uriPrefix + "/" + srm.getPath().getValue();
System.out.println(srm.getHttpMethod() + " at the path " + uri + " return " + srm.getReturnType().getName());
}
}
}
class Dog {}
class Cat {}
@Path("/animals")
class AnimalResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("dog")
public Dog getDog(){
return null;
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("cat")
public Cat getCat(){
return null;
}
}
这些自省类在 jersey-server 中。
请注意,上面的示例使用了一些在包名称中包含“impl”的 Jersey 类,这表明这些 Jersey 类不适合公共消费,并且将来很可能会发生重大变化。我只是在这里猜测-我不是泽西岛的提交者。只是一个随机用户。
通过仔细阅读源代码,我发现了上面的所有内容。我从未见过任何关于内省 JAX-RS 注释类的批准方式的文档。我同意一个官方支持的 API 来做这种事情会非常有帮助。