2017-04-10 134 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