2010-05-31 58 views
22

我在一家REST項目中使用新澤西,我需要使用正則表達式@Path和正則表達式(州/ REST)

挖它是簡單的像:

@Path("/resources") 
public class MyResource { 

    @GET 
    @Path("{subResources:.*}") 
    public String get(@PathParam("subResources") String subResources) {...} 
} 

但是,做這樣的方法越來越請求只有當我經過1個PARAM,例如:

GET :.../resources/firstSubResource

如果使用多於1個參數的方法是不得到請求,例如:

GET:... /資源/ firstSubResource/seccondSubResource/thirdSubResource


我只能使用正則表達式,如果在我的@Path中包含變量文本值,例如:

@Path("{SubResource1}/{subResources:.*}") 

或者

@Path("/hardCodeString/{subResources:.*}") 

今天,我可以用一個變量的這個解決方案運行,但也不行對我的觀點。


我的web.xml

(...) 
    <servlet> 
     <servlet-name>Jersey Spring Web Application</servlet-name> 
     <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>com.myproject.rest</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey Spring Web Application</servlet-name> 
     <url-pattern>/1.0/*</url-pattern> 
    </servlet-mapping> 
(...) 

問題

  • 沒有任何人有什麼合作關係?
  • 我做錯了什麼?
  • 我認爲這可能是一個錯誤,當使用多個@Path,一個在Class中,另一個在Method中。
  • 任何提示表示讚賞!

問候

+1

請您發佈更多信息,包括:和web.xml中的標籤,示例URL,匹配每個示例URL的@Path註釋以及Jersey收到的所有路徑參數值。 (編輯您的問題以添加此信息。) – 2010-06-01 10:45:51

+0

@Daniel - 感謝您的回答,我在問題中添加了更多信息。問候! – 2010-06-01 14:19:25

回答

1

你會反對接受單一PathParam,代表通過一些象徵性的分隔子資源的集合?

例如...

@Path("/resources) 
public class MyResource { 

    @GET 
    @Path("{subResources}") 
    public String get(@PathParam("subResources") String subResources) 
    { 
     String[] params = StringUtils.split(subResources, ";"); 
    } 
}

..應處理

 
GET: .../resources/firstSubResource 
& 
GET: .../resources/firstSubResource;seccondSubResource;thirdSubResource 
20

你可以嘗試使用正則表達式作爲Overview of JAX-RS 1.1

代碼片段給出看上去就像下面的情況

@Path("resources/") 
public class MyResource { 

    @GET 
    @Path("{subResources: [a-zA-Z0-9_/]+}") 
    public String get(@PathParam("subResources") String subResources) {...} 
} 

希望有所幫助。

+0

如果你想在「resources /」之後匹配任何字符,使用'。+',例如'@Path(「{subResources:。+}」)',因爲上述內容不會與空格或句點匹配在裏面。例如「/resources/test/me.jpg」不匹配。 – 2015-09-15 13:10:23

+0

和一個稍微修改 - 如果你想確保&不包含在'subResources'部分,使用'[^&?]'模式而不是'。+ – 2015-09-22 18:11:14

6

你可以嘗試刪除您@PathParam註釋和而不是獲取路徑UriInfo

@Context UriInfo uriInfo; 

@GET 
@Path("{subResources:.*}") 
public String get() 
{ 
    String path = uriInfo.getPath(); 
} 

我不知道爲什麼,但它在我的應用程序工作。

8

我知道這是一個非常古老的問題,但我只是在嘗試尋找自己的解決方案時遇到了它。我試圖接受s3樣式文件名,例如/folder/whatever/blah/.../image.jpg,它可以是任何可以想象的長度幷包含許多/ s。

反正自己的解決方案:

@Path("/hardCodeString/{subResources:.*}") 

給了我一個想法......原來,這個工程:

@Path("/{subResources:.*}") 

通知初始/。現在也許在三年之內,這是他們固定的東西或其他什麼,但我希望這可以幫助某人,因爲這個網頁似乎是唯一提到這種困境的地方。