新泽西州是否提供任何方法来列出所有它暴露的资源? 也就是说,给定的资源类:
package com.zoo.resource
@Path("/animals")
public class AnimalResource {
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("dog")
public Dog getDog(){
...
}
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("cat")
public Cat getCat(){
...
}
}
新泽西州是否提供任何办法,我得到的信息:
-
GET
在路径/animals/dog
返回一个类型Dog
-
GET
在路径/animals/cat
收益型Cat
(进而,它提供了一种方式让我知道,AnimalResource是资源?)
我想有一个单元测试提供给我这个信息,以便我可以检查每一个我揭露资源符合哪些外部系统的期望。 我知道有AUTOMAGIC暴露出application.wadl ,但我不认为这显示了我返回类型,我不知道如何从我的测试中访问它。
[更新 - 例如是相同的,但我已经改写我的注意事项]
可以办到。 尝试以下方法:
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;
}
}
这些自省类在球衣的服务器。
需要注意的是上面的例子中使用,在这表明这些州类不适合大众消费,并很可能在未来的重大更改包的名称有“IMPL”一些州班。 我只是猜测这里 - 我并不是一个新泽西的提交。 只是一个随机的用户。
另外上面的一切我想通了,通过仔细阅读源代码。 我从来没有见过的方式批准的任何文件自省注释类JAX-RS。 我同意,正式支持的API做这种事情是非常有帮助的。