当前位置: 首页 > 面试题库 >

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

傅彬
2023-03-14
问题内容

我一直在使用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

希望这会有所帮助。



 类似资料:
  • 问题内容: 在我正在使用的Web服务中,我需要使用查询参数来实现一个URI,如下所示: 要对其进行分解,我需要能够使用查询参数来指定多个/所有商店中的数据以及这些商店中多个/所有项目的数据。到目前为止,我已经能够很好地实现一个查询参数以提取项目数据,但是我对如何实现更多查询一无所知,而且似乎找不到我之前所见过的资源。通过此实现。 到目前为止,我所采用的方法是 这对于一项很有效,如果我不在URI中键

  • 我需要瞄准地图函数中的所有组件,但我只得到其中的最后一个组件。

  • 假设我有一个Employee类。它有很多字段,比如id、名字、姓氏、姓名、年龄、薪水和其他字段。现在,我正在进行一个Get查询,希望使用所有这些字段(required=false)作为请求参数传递。 但问题是,可能有许多组合,如(firstName, age)或(age,工资,lastName)或(指定,年龄,工资,lastName)等等。那么我应该如何处理所有这些筛选器。我必须为每个案例编写每个

  • 问题内容: 只是想知道是否有一种更优雅或更标准的方式来处理可选参数,或者是否必须检查每个参数是否为空。我有10多个可选参数,因此变得有点难看。 理想情况下,我想是这样的bash命令:。 问题答案: 编写这样的实用程序

  • 问题内容: 所以我试图使反应与ES6语法一起工作。在ES5中,我有setInitialState,而没有使用函数绑定语法的构造函数。我有一个价格列表,该价格是任意的,并且我希望状态在输入元素发生更改时发生变化。但是正确的价格必须改变。 我什至不确定这是否是正确的方法。有人可以告诉我最近应做的事情吗? 这是我的代码: 这是错误… 问题答案: 您绑定的功能不正确 在构造函数中,您无需指定参数,只需要像

  • 所以我试图用ES6语法使反应工作。在ES5中,我没有使用函数绑定语法的构造函数。我有一个任意的价格列表,当输入元素改变时,我希望状态改变。但是正确的价格必须改变。 我甚至不确定这是正确的方法。有人能告诉我最近应该怎么做吗? 这是我的代码: 这就是错误...