我读到在请求中传递数组的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"]
这让我相信第一种方式被认为是最佳实践,尽管我喜欢第二种方式......
答案 0 :(得分:13)
第一种方法是首选的标准方法。
您当然可以使用第二种方式,但您必须实现自己的方式来标记请求参数值,以及所涉及的所有问题。例如,考虑如果您的某个值包含','字符会发生什么。
因为第一个是非常标准的,它的好处是可以很好地适应jax-rs和验证框架;因为我们总是验证我们的输入,对吗? ;)
答案 1 :(得分:4)
我认为这是一个意见问题。 JAX-RS允许您使用以下参数:
@QueryParam("orderBy") List<String> orderBy
我认为它会像Spring一样关于“神奇地转换”部分。我不一定认为这是“最佳实践”的指示。只是某些参数可以有多个值,框架允许您读取这些多个值(想想某些HTML表单)。
就个人而言,我会使用逗号分隔的单个值。像你说的那样“更干净”,价值更容易构建(你不依赖于参数键/值的顺序,这可能会给客户开发者带来麻烦)。