用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