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

时间:2010-09-06 17:28:51

标签: parameters jax-rs

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

1) GET /users?orderBy=last_name&orderBy=first_name

但是,我也看到了以逗号分隔的参数(我觉得这更“干净”):

2) GET /users?orderBy=last_name,first_name

我想实现多重排序(按last_name排序用户,然后重复last_names按first_name排序)。代码方面,这很容易(谷歌的番石榴图书馆拯救),但我应该如何揭露这个?第一种方法是否保留字段的顺序(按last_name排序,然后按first_name排序)?

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

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

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

2 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:4)

我认为这是一个意见问题。 JAX-RS允许您使用以下参数:

@QueryParam("orderBy") List<String> orderBy

我认为它会像Spring一样关于“神奇地转换”部分。我不一定认为这是“最佳实践”的指示。只是某些参数可以有多个值,框架允许您读取这些多个值(想想某些HTML表单)。

就个人而言,我会使用逗号分隔的单个值。像你说的那样“更干净”,价值更容易构建(你不依赖于参数键/值的顺序,这可能会给客户开发者带来麻烦)。