请原谅我,如果我问一个明显的问题(也许我在某个地方的文档中错过了它?)但有没有人找到一种在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彼此交错...
任何提示?
答案 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);
}
等