我一直致力于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的用户等。
答案 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