Parameters JAX-RS/Rest:多次设置参数,还是使用单个逗号分隔的参数?

Parameters JAX-RS/Rest:多次设置参数,还是使用单个逗号分隔的参数?,parameters,jax-rs,Parameters,Jax Rs,我了解到在请求中传递数组的HTTP方法是多次设置参数: 1) GET /users?orderBy=last_name&orderBy=first_name 但是,我也看到了逗号分隔的参数(我觉得这是“更干净的”): 我想实现多重排序(按姓氏排序用户,然后按姓氏排序重复的姓氏)。代码方面,这很容易(谷歌的Guava库可以拯救),但我应该如何公开这一点?第一种方法是否保留了字段的顺序(先按姓氏排序,然后按姓氏排序) 如果在请求中多次设置参数,Spring将神奇地将其转换为String[]

我了解到在请求中传递数组的HTTP方法是多次设置参数:

1) GET /users?orderBy=last_name&orderBy=first_name
但是,我也看到了逗号分隔的参数(我觉得这是“更干净的”):

我想实现多重排序(按姓氏排序用户,然后按姓氏排序重复的姓氏)。代码方面,这很容易(谷歌的Guava库可以拯救),但我应该如何公开这一点?第一种方法是否保留了字段的顺序(先按姓氏排序,然后按姓氏排序)

如果在请求中多次设置参数,Spring将神奇地将其转换为String[]数组:

... @RequestParam("orderBy") String[] orderBy ... becomes ["last_name","first_name"]

这让我相信第一种方法被认为是最佳实践,尽管我喜欢第二种方法……

我认为这是一个意见问题。JAX-RS允许您拥有如下参数:

@QueryParam("orderBy") List<String> orderBy
@QueryParam(“orderBy”)列表orderBy
我认为这和Spring关于“神奇转化”部分的做法是一样的。我不一定认为这是“最佳实践”的象征。只是有些参数可以有多个值,框架允许您读取这些多个值(想想某些HTML表单)


就个人而言,我会使用逗号分隔的单个值。正如您所说,它“更干净”,而且更容易构建值(您不依赖参数键/值的顺序,这可能会给客户端开发人员带来一些麻烦)。

第一种方法是首选的标准方法

您当然可以使用第二种方法,但是您必须实现自己的方法来标记请求参数值,包括所有涉及的问题。例如,考虑如果你的一个值包含一个‘,’字符会发生什么。


因为第一个是相当标准的,所以它的好处是可以很好地与jax-rs和验证框架相适应;因为我们总是验证我们的输入,对吗?;)

这取决于您从谁那里获得@RequestParam。不过,它可能在JAX-RS标准中指定。顺序对于OPs需求至关重要,但我认为规范不能保证顺序。因此第一种方法不可靠,不应使用。这种方法将返回包含一个元素“last_name,first_name”的列表。是吗?@Normal我的意思是示例列表行代码将接近Spring提供的代码。我不确定JAX-RS规范是否被澄清以保持秩序(我相信大多数实现现在应该这样做)。逗号分隔的单个值是另一种方法(如果将列表和逗号分隔的单个字符串组合在一起,则在注释时只会得到一个元素)。回顾过去,“GET/users?orderBy=last\u name&orderBy=first\u name”的列表方法也不错,在其他语言框架中更像是一种标准方法。
@QueryParam("orderBy") List<String> orderBy