2

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

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

例如 django 有一个非常好的基于正则表达式的匹配。我正在考虑做类似枚举的事情:

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

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

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

cars/1/wheels/3

您需要多个相互交错的路径ID...

有小费吗?

4

2 回答 2

4

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

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

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

或者如果你在你的网络服务前面加上了前缀/ws/

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

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

于 2010-05-27T03:15:22.133 回答
0

Well - I assume you have a @Path on each resource? This means you don't have to keep track of URLs across your entire application, rather just within each class - which is relatively easy if you annotate the interface.

Using enums won't work - you can only put contants into an annotation, but using a class holding final static String could work.

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);

}

etc.

于 2010-06-07T16:59:59.640 回答