2017-04-10 136 views
0

如何解決REST API中解析URI參數的問題。例如:解析RESTful API中的URI參數

http://api.example.com/item/ [{{ItemID}} [/{{Property}}]] 

以下請求都應該是有效的:

http://api.example.com/item 
http://api.example.com/item/ 
http://api.example.com/item/1 
http://api.example.com/item/1/ 
http://api.example.com/item/1/description 
http://api.example.com/item/1/description/ 

我需要能夠獲得的項目ID和屬性值,如果它們存在。

我試圖使用Apache Commons的StringUtils和substringBefore/substringAfter,但事情很快就變得混亂。有沒有圖書館可以完成這樣的任務,或者我忽略了另一種方式?

+0

有沒有辦法關閉java語法突出顯示? – vikarjramun

回答

0

我絕對欣賞@賈迪普的答案,但因爲我沒有使用JAX-RS,我無法使用它。在做了一些研究之後,顯然沒有任何圖書館可以這樣做,所以我決定創建自己的圖書館。這是非常粗糙的,目前沒有文件。不過,我會盡快更新。歡迎您向我提交拉取請求,並加以改進。

https://github.com/ArjMart/UrlParser

用法:

UrlParser parser = new Parser(); 
parser.setTemplate("/item/{INT:itemID}/{STRING:itemAttribute}"); 
UrlParametersMap upm = parser.parse(request.getURI()); 
boolean attributeExists = upm.parameterExists("itemAttribute"); 
String attribute = null; 
if(attributeExists){ 
    attribute = upm.getString("itemAttribute"); 
} 

免責聲明: 我(顯然)隸屬於UrlParser因爲我的唯一的創造者和貢獻者。

+0

FWIW:https://github.com/danisola/restify –

+1

@OscarPerez哦。我沒有看到:)那麼這就是競爭是如何創造的我猜... – vikarjramun

+0

確實!多多益善 :) –

1

如果使用JAX-RS,你可以這樣做

@GET 
@Path("/{param1}/{param2}") 
@Produces("text/plain") 

public String get(@PathParam("param1") int param1, @PathParam("param2") int param2) { 

    logger.debug("\n param1 = " + param1 + " .. param2 = " + param2); 
} 
+0

截至目前我只是使用Servlet 3.0 API,但如果需要,我會切換到JAX-RS – vikarjramun