[更新 - 例は同じですが、警告を言い換えました]
それはできます。次のことを試してください。
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 が非常に役立つことに同意します。