2015-04-08 79 views
0

我想在我的Rest資源類上有兩個GET方法。如果查詢參數具有value1和第二 人會反應在value2JAVA EE QueryParams上的其他條件GET方法

比方說:

@Path("/myApi") 
public class MyApiService { 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response methodOne(...) { 
     ... 
     return ...; 
    } 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response methodTwo(...) { 
     ... 
     return ...; 
    } 

如何實現條件路由的查詢參數

我想methodOne()發生反應,如果QueryParam?type=onemethodTwo() if QueryParam is ?type=two

+0

請您告訴我們您爲什麼認爲這是必要的? –

+0

一個選項是使用[子資源定位器](http://stackoverflow.com/a/28978111/2587435) –

+0

@Tichodroma我想分開的方法,所以例如在招搖,你可以看到更多的方法。我認爲方法每個不同的查詢參數是不是很愚蠢,因爲它看起來像... –

回答

0

根據QueryParam選擇servlet處理程序並不是一個好的方法,並且默認情況下,沒有任何庫爲您提供oportunity來執行此操作。 想到的最接近的是PathParam,這就像Path("\api\{param1}\{param2}"),但它不是你正在尋找。

爲了達到想要你只想

  • 註銷這些方法爲servlet的處理程序(可選,如果你不需要他們的queryparam選擇範圍之外)
  • 定義將選擇基於一個新的query param

@GET @Produces(MediaType.APPLICATION_JSON)

public Response methodThree(QueryParam('type') String type) { 
return type.equals("type1") ? this.methodOne() : this.methodTwo(); 
} 
+0

這是選項,我認爲這樣,我認爲這是唯一的選擇:( –

0

對於相同的路徑,不能有兩個具有相同參數的方法。 它不漂亮,但它會工作..

@GET 
@Produces(MediaType.APPLICATION_JSON) 
public Response myMethod(@QueryParam("type") String type){ 

if(type.equals("one")) 
    return methodOne(); 
else 
    return methodTwo(); 
}