在泽西岛组织网站的集中方式?

时间:2010-05-26 20:10:23

标签: java rest jersey

请原谅我,如果我问一个明显的问题(也许我在某个地方的文档中错过了它?)但有没有人找到一种在Jersey Java框架中组织URL的好方法?

我的意思是在Java源代码中集中组织它们,这样您就可以确定没有两个类引用相同的Url。

例如,django有一个非常好的regex-based匹配。 我在想做一个像枚举的事情:

enum Urls{
    CARS  ("cars"),
    CAR_INFO ("car", "{info}");

    public Urls(String path, String args) 
    ...
}

但你可以想象,如果你有像这样的网址,那么很快就会失控:

cars/1/wheels/3

您需要多个路径ID彼此交错...

任何提示?

2 个答案:

答案 0 :(得分:4)

根据我对Jersey的经验,当我尝试使用相同的@Path注释两个地方时,我遇到了编译错误而且无法运行。情况可能并非总是如此,因此以下内容可能有所帮助:

只需从您的网络资源中请求,您就可以从Jersey应用中获取application.wadl个文件:

$ curl http://localhost:8080/application.wadl

或者如果您在/ws/

下为您的网络服务添加了前缀
$ curl http://localhost:8080/ws/application.wadl

application.wadl文件是一个XML文件,它显示正在运行的应用程序中的所有资源,以及可以在资源上调用的方法。有关此文件的布局,请参阅the following resource

答案 1 :(得分:0)

嗯 - 我假设你在每个资源上都有一个@Path?这意味着您不必跟踪整个应用程序中的URL,而只需跟踪每个类中的URL - 如果您对界面进行注释,则相对容易。

使用枚举不起作用 - 您只能将注释放入注释中,但使用包含最终静态字符串的类可以正常工作。

public class UrlConst {
  public final static RESOURCE_MY_RESOURCE="/resource";
  public final static RESOURCE_MY_RESOURCE2="/resource";
  public final static OP_GET_ALL="/";
  public final static OP_GET_BY_ID="/{id}";
}

@Path(UrlConst.RESOURCE_MY_RESOURCE)
public interface MyResource {

 @GET
 @Path(UrlConst.OP_GET_ALL)
 @Produces(MediaType.APPLICATION_XML)
 public ObjectList getAll();

 @GET
 @Path(UrlConst.OP_GET_BY_ID)
 @Produces(MediaType.APPLICATION_XML)
 public Object get(@PathParam("id") int id);

}

@Path(UrlConst.RESOURCE_MY_RESOURCE2)
public interface MyResource2 {

 @GET
 @Path(UrlConst.OP_GET_ALL)
 @Produces(MediaType.APPLICATION_XML)
 public ObjectList getAll();

 @GET
 @Path(UrlConst.OP_GET_BY_ID)
 @Produces(MediaType.APPLICATION_XML)
 public Object get(@PathParam("id") int id);

}