我有如下的REST端點類:兩個GET方法與不同數量的查詢參數:REST
@Path("/sports")
public interface SportsEndpoint {
@GET
List<Player> getPlayersOfSports(@QueryParam("sportId") String sportId, @QueryParam("sportName") String sportName);
@GET
List<Player> getPlayersOfSports(@QueryParam("sportId") String sportId, @QueryParam("sportName") String sportName, @QueryParam("country") String country);
}
正如你所看到的,我有幾乎相同的特徵,除了第二個方法二GET
方法需要額外的QueryParam
。
我嘗試使用URL來訪問這些端點:
http://localhost:8080/rest/api/sports?sportId=100&sportName=badminton
http://localhost:8080/rest/api/sports?sportId=100&sportName=badminton&country=japan
兩種這些URL解析爲使用第一種方法的簽名。理想情況下,我期待第一個url,第一個方法簽名將被調用,第二個url第二個方法(帶有3個查詢參數的那個)將被調用。
但看起來在這兩種情況下,第一種方法正在調用。
我知道Rest資源由路徑唯一標識,而不是查詢參數。但是,即使查詢參數的數量不同,其餘端點也不會被唯一標識嗎?
有人可以指點一些規範/文章/文檔,我可以在設計rest api終結點時瞭解多態性嗎?
僅供參考:我正在使用RestEasy。
總之,Jax-Rs使用路徑信息來解析調用的方法。如果多個方法可能匹配使用的第一個方法。你可以做的是刪除第一個方法,因爲它已經被第二個方法覆蓋,並檢查裏面的最後一個參數是否爲空。由於查詢參數被視爲可選參數(如果它們不可用),您的框架應該注入一個空值(或者如果您指定了一個,則爲默認值) –