2017-05-05 79 views
3

我想为特定的方法获取URI而不“硬编码”它。Jersey:获取方法的URL

我试图UriBuilder.fromMethod但它只能产生在@Path注释为该方法指定的URI,它没有考虑到资源类它在的@Path

例如,这里的类

@Path("/v0/app") 
public class AppController { 

    @Path("/{app-id}") 
    public String getApp(@PathParam("app-id") int appid) { 
     // ... 
    } 

} 

我想获取getApp方法的URL,例如这个/v0/app/100

UPDATE:

我想从其他方法的URL比getApp

回答

3

如果使用UriBuilder.fromResource它的工作原理,然后用path(Class resource, String method)

URI uri = UriBuilder 
     .fromResource(AppController.class) 
     .path(AppController.class, "getApp") 
     .resolveTemplate("app-id", 1) 
     .build(); 

不知道添加的方法路径为何不适用于fromMethod

这是一个测试案例

public class UriBuilderTest { 

    @Path("/v0/app") 
    public static class AppController { 

     @Path("/{app-id}") 
     public String getApp(@PathParam("app-id") int appid) { 
      return null; 
     } 
    } 

    @Test 
    public void testit() { 
     URI uri = UriBuilder 
       .fromResource(AppController.class) 
       .path(AppController.class, "getApp") 
       .resolveTemplate("app-id", 1) 
       .build(); 

     assertEquals("/v0/app/1", uri.toASCIIString()); 
    } 
}