在Java中处理URI(RESTfully)中的多个参数

时间:2011-05-25 16:09:38

标签: java rest uri jersey

我一直致力于Java / Jersey中的小规模Web服务,该服务从XML文件中包含的客户端读取用户信息列表。我目前只在一个方面具有此功能:在URI中使用多个参数来表示提取多组用户信息或多组客户端信息。我有一个当前有效的版本,但不是最好的方式,也不是项目描述所要求的。

目前,我的代码如下所示:

@Path("Client/{client}/users")
public class UserPage 
    {
    @GET
    @Produces(MediaType.TEXT_HTML)
    public String userChoice(@PathParam(value = "client") final String client) 
    {****Method here which handles a list of 'users'****}

@GET
@Path("{name}")
@Produces(MediaType.TEXT_HTML)
public String userPage(@PathParam(value = "client") final String client, @PathParam(value = "name") final String name)
    {****Method here which handles 'user' information****}

第一种方法处理来自URI中“{client}”表示的“客户端”的用户列表。第二种方法在URI中提供由“{name}”表示的“用户”信息。两者都将使用单个参数运行。目前,为了处理多个“用户”,我将“{name}”逗号分隔为“Client / Chick-Fil-A / users / Phil,Bradley”。我可以在使用@PathParam之后对其进行解析并创建这些“用户”的数组,但同样,我觉得这不是处理此问题的最佳方法,项目描述需要不同的东西。

有没有办法用URI格式化为“Client / Chick-Fil-A; cd = Phil,Bradley”完成同样的任务? (; cd =是给我带来最大麻烦的。) 我还需要能够将这种格式用于多个客户端,即“Client; cd = Chick-Fil-A,Subway / users; cd = Phil,Bradley”。

编辑:澄清项目: 客户端信息包含在6个单独的文件中。每个文件都有相同的3个用户(这是一个有效的概念证明)。我需要能够提取不同的信息子集,例如,来自麦当劳和Chick-Fil-A的用户Phil,或来自麦当劳的用户Phil和Peter,或来自所有客户的名为Peter的用户等。

2 个答案:

答案 0 :(得分:3)

您不能在URL路径中使用'=',因为它是保留字符。但是,您可以使用许多其他字符作为分隔符,例如“ - ”和“,”。因此,您可以使用' - '代替'='。如果你真的想使用'='那么你必须URL-encode它;但是,我强烈建议不要这样做,因为它可能会使事情变得更加复杂。

您可以在此处查看URL字符串的语法:

http://www.w3.org/Addressing/URL/url-spec.txt

复制并搜索以下字符串以跳至路径语法:

 path                    void |  segment  [  / path ] 

 segment                 xpalphas

也就是说,我认为HTTP请求通常仅用于请求单一资源。所以我个人的意见是不按照您实施的方式实施服务。为了获得多个客户端,我将使用查询参数作为这样的过滤器:

Client/{cName}/users?filters=<value1>,<value2> ...

编辑:从您到达的商业案例中,您似乎可能需要像

这样的服务
/users?<filters>
/clients?<filters>

所以说你想从所有客户那里获得Peter,然后可以请求这种形式:

/users?name=Peter

同样,如果你想从星巴克那里得到杰克和彼得,你可以这样做:

/users?name=Peter,Jack&client=Starbucks

希望这有帮助。

答案 1 :(得分:2)

查询字符串具有以下语法,您可以使用多个具有相同名称的参数:

http://server/path/program?<query_string>

其中query_string具有以下语法:

field1=value1&field1=value2&field1=value3…

有关详细信息,请查看维基百科中的此条目:http://en.wikipedia.org/wiki/Query_string