2012-06-07 24 views
4

JAX-RS/Jersey允許使用@PathParam批註將URL路徑元素轉換爲Java方法參數。JAX-RS/Jersey中的可變長度數組路徑段序列?

有沒有辦法將未知數量的路徑元素轉換爲可變參數Java方法的參數? I. e。 /foo/bar/x/y/z應該去的方法:foo(@PathParam(...) String [] params) { ... }其中params[0]xparams[1]yparams[2]z

我能做到這一點在新澤西州/ JAX-RS或一些方便的方法是什麼?

回答

4

不知道這是否正是你正在尋找,但你可以做這樣的事情。

@Path("/foo/bar/{other: .*} 
public Response foo(@PathParam("other") VariableStrings vstrings) { 
    String[] splitPath = vstrings.getSplitPath(); 
    ... 
} 

其中VariableStrings是您定義的類。

public class VariableStrings { 

    private String[] splitPath; 

    public VariableStrings(String unparsedPath) { 
    splitPath = unparsedPath.split("/"); 
    } 
} 

注意,我沒有檢查這個代碼,因爲它只是爲了給你一個想法。 這是可行的,因爲VariableStrings可以注入,因爲它們的構造函數 只需要一個字符串。

查看docs

最後,作爲使用@PathParam註釋注入VariableString 的替代方法,您可以將此邏輯封裝到您自己的自定義Jersey Provider中。這個提供者會或多或少地注入一個「VariableStrings」,但它可能看起來有點乾淨。不需要PathParam註釋。

Coda Hale給出了很好的overview

+0

優雅的解決方法;特別是有一個可重用類來解析的好主意。我會在一段時間後接受,以確認沒有直接的方式。謝謝! – necromancer

+0

你可以做的另一件事情,或多或少是同一件事,就是將這個邏輯包裝在你自己的自定義Jersey Provider中。這個提供者會爲你注入一個「VariableStrings」對象。不需要PathParam註釋。 – esiegel

+1

Coda Hale給出了一個很好的概述。 http://codahale.com/what-makes-jersey-interesting-injection-providers/ – esiegel