2013-03-14 23 views
0

在我州的資源,我有:MyClass的作爲@PathParam澤西資源的方法

@GET 
@Path("/{dataType}/{dataSet}") 
public Response search(
     @PathParam("dataType") String dataType, 
     @PathParam("dataSet") String dataSet){ 
    ... 
} 

不是字符串我想用我自己的類:

@GET 
@Path("/{dataType}/{dataSet}") 
public Response search(
     @PathParam("dataType") DataType dataType, 
     @PathParam("dataSet") DataSet dataSet){ 
    ... 
} 

然而DataSet是依賴於數據類型( DataSet在其構造函數中使用DataType)。有沒有辦法與澤西島做到這一點?

+0

我不清楚DataType和DataSet是如何相關的。你能將一些源代碼粘貼到這些類嗎? – hertzsprung 2013-03-14 15:53:42

回答

1

您可以使用Jersey的內置轉換,使用靜態fromString()方法(請參閱Jersey documentation),也可以使用自定義提供程序來處理路徑段。對於後者,你將需要一個像這樣的類:

public class MyProvider extends PerRequestTypeInjectableProvider<Context, DataType> { 
    @Context UriInfo uriInfo; 

    public Injectable<DataType> getInjectable(ComponentContext componentCtx, Context ctx) { 
     uri.getPathSegments(); 
     ... 
    } 
} 
+0

因爲我需要DataType來創建DataSet我不能使用'fromString'方法。提供者對我來說工作正常。我可以爲兩者使用路徑段並創建我需要的內容。我不知道有沒有更好的方法來做到這一點?具體而言,我正在研究創建兩種資源的方式。一個用於DataType的方法返回其他資源,然後返回我需要的資源。在這種情況下,我需要將第一個資源注入我的提供程序以獲取第二個資源路徑參數。這聽起來像是值得做的事情,或者你認爲只用單一資源會更好嗎? – efan 2013-03-15 12:02:38

+0

嗯,我不太確定,但你有沒有試過看澤西州的子資源? – hertzsprung 2013-03-15 12:15:49

+0

謝謝,無論如何,現在我得到了我需要的工作。 – efan 2013-03-15 16:27:00