找到在我的应用,新泽西资源的方法清单?(Find a list of all Jersey reso

2019-07-04 00:20发布

新泽西州是否提供任何方法来列出所有它暴露的资源? 也就是说,给定的资源类:

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 ,但我不认为这显示了我返回类型,我不知道如何从我的测试中访问它。

Answer 1:

[更新 - 例如是相同的,但我已经改写我的注意事项]

可以办到。 尝试以下方法:

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做这种事情是非常有帮助的。



文章来源: Find a list of all Jersey resource methods in my app?