我有一个RESTful网址,需要offset
或prefix
请求参数(但不能同时包含两者)。
GET /users?offset=0&count=20
GET /users?prefix=J&count=20
执行此规则的最佳方法是什么? Spring有@RequestParam注释,可选参数的'required'属性,但我想对这两个参数强制执行“或 - 或”规则。我知道我可以在代码中执行此操作,但还有另一种方法吗?
此外,处理“不切实际”请求的正确方法是什么?假设我有1亿用户;以下请求,虽然正确RESTful,但我不想支持:
GET /users <-- Gets all 100 million users, crashes server and browser!
我应该寄回什么?
答案 0 :(得分:2)
您可以创建两种方法,并使用@RequestMapping
的{{1}}属性选择其中一种方法:
params
答案 1 :(得分:0)
REST的较少实践原则包括要求资源“可被发现”。如果要求您提供包含8亿用户的完整列表,并且您不想提供它,则可以考虑提供以某种方式描述如何过滤集合的页面:例如,XForms文档或包含带有offset / prefix / count字段的FORM元素,或带有适当参数的URI模板
或者您可以发送“413实体太大”错误 - 编辑:不,你不能。对不起,我误读了这段代码的描述
如果您决定沿着发送第一页的路线走下去,我想我会将其作为HTTP重定向发送到/ users?offset = 0&amp; count = 20,以便客户有更好的想法他们已经没有得到完整的集合(如果您的回复包含访问后续页面的链接,甚至更好)