在一个查询接口中,需要的参数比较多,如果还是使用GET方式进行请求的话,那么,Controller 中的方法的参数列表将会非常多,如:
public List<String> getName(@RequestParam String query1, @RequestParam String query2, @RequestParam String query3, ......) { return new ArrayList<>(); }
这样的话参数太多,不好看
方法一
换成POST请求,将所有参数封装成一个类,然后使用 @RequestBody注解将参数自动解析成该类的一个实例,如:
public List<String> getName(@RequestBody QueryDto queryDto) { return new ArrayList<>(); } public class QueryDto { private String query1; private String query2; private String query3; // getter, setter ... }
不过,有人认为RESTFUL“规范”,认为POST不应该用来进行查询。这么想的确合理,不过,这个“规范”只是建议大家这么来遵守,并不是强制要求。有兴趣的,可以看看京东的请求,它的部分查询请求也是用的POST。
方法二
还是使用GET请求,但是将所有请求参数通过JSON格式来传递,controller拿到参数后,将该JSON转化为相应的对象,如:
public List<String> getName(@RequestParam String queryDtoStr) { QueryDto queryDto = new Gson().fromJson(queryDtoStr, QueryDto .class); // .... return new ArrayList<>(); } public class QueryDto { private String query1; private String query2; private String query3; // getter, setter ... }