2010-05-26 52 views
2

請原諒我,如果我問一個明顯的問題(也許我錯過了它的文檔在某處?),但有誰發現了一個很好的方法來組織他們的網址在Jersey Java框架?在澤西島組織網站的集中化方式?

我的意思是在Java源代碼中集中組織它們,這樣就可以確定沒有兩個類引用同一個Url。

例如django有一個很好的regex-based匹配。 我在想這樣做像一個枚舉的:很快

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

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

,但你可以想像,失控的,如果你有喜歡的網址:

cars/1/wheels/3 

,你需要多路徑的IDS交織與另一個...

任何提示?

回答

4

根據我對澤西島的經驗,當我試圖使用相同的@Path對兩個地點進行註釋時,我遇到了編譯錯誤,它不會運行。這可能並非總是如此,所以下面可能會有幫助:

您可以通過簡單地從你要求它的網絡資源從您的新澤西州的應用程序的application.wadl文件:

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

,或者如果您前綴您的網頁下/ws/

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

的application.wadl文件服務是一個XML文件,顯示你所有的資源在你運行應用A n,以及可以調用資源的方法。有關如何佈置此文件,請參閱the following resource

+1

謝謝你讓我知道WADL。 – drozzy 2010-05-27 12:19:07

+0

看起來真的沒有什麼好的方法來組織球衣中的URL。無論如何 - 謝謝! – drozzy 2010-06-10 12:39:44

0

嗯 - 我假設你在每個資源上都有一個@Path?這意味着您不必跟蹤整個應用程序中的URL,而只需在每個類中進行跟蹤 - 如果您註解界面,這相對容易。

使用枚舉不起作用 - 您只能將常量放入註釋中,但使用保存最終靜態String的類可以工作。

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

} 

+0

Woot,謝謝你讓我知道關於javax.ws.rs.core.MediaType的常量!我正在使用我自己的:-) – drozzy 2010-06-07 17:30:12

+0

關於你的答案 - 我明白你在說什麼,但對我來說看起來有點笨拙。我會考慮的,謝謝。 – drozzy 2010-06-07 17:30:47