用Java处理URI中的多个参数(RESTful)

我一直在使用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的用户,等等。

回答:

您不能在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>

假设您想从所有客户那里获得Peter,然后可以提出以下形式的要求:

/users?name=Peter

同样,如果您想从星巴克那里获得杰克和彼得,则可以执行以下操作:

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

希望这会有所帮助。

以上是 用Java处理URI中的多个参数(RESTful) 的全部内容, 来源链接: utcz.com/qa/428089.html

回到顶部