繁体   English   中英

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

[英]Handling multiple parameters in a URI (RESTfully) in Java

我一直在使用 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}”表示的“用户”信息。 两者都将 function 与单个参数。 目前,为了处理多个“用户”,我使用“{name}”逗号分隔,如“Client/Chick-Fil-A/users/Phil,Bradley”。 我可以在使用 @PathParam 并创建一个由这些“用户”组成的数组后对其进行解析,但我再次觉得这不是处理这个问题的最佳方法,并且项目描述需要一些不同的东西。

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

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

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

您可以在此处查看 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>

所以说你想从所有客户那里得到彼得然后可以有这个表格的请求:

/users?name=Peter

同样,如果你想从星巴克得到 Jack 和 Peter,那么你可以这样做:

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

希望这会有所帮助。

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

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

其中 query_string 具有以下语法:

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

有关更多详细信息,请查看 Wikipedia 中的此条目: http://en.wikipedia.org/wiki/Query_string

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM