vir*_*sha 6 rest web-services spring-mvc http-headers
我想从前端的数据库中获取实体列表.所以我在Spring MVC中编写了POST REST HTTP调用.
但是我读了HTTP文档,它说无论何时你需要从数据库中检索数据都更喜欢GET调用.那么,是否有任何我可以从角度JS替换POST调用GET调用并传递整数列表.但是,GET HTTP有许多缺点,例如:URL的长度是有限的.考虑到我们必须从数据库中获取1000个实体的情况.
请建议我获取实体的可能方法或在Spring MVC中编写GET REST API以获取整数列表(指实体的ID).
例如:考虑书表中有100本书,但我只想要几本书,比如id:5,65,42,10,53,87,34,23.这就是我在POST调用中在整数列表中传递此Id列表的原因.
目前卡住了如何将其转换为GET调用.简而言之,如何通过GET REST调用传递整数列表.
我更喜欢通过HTTP路径变量的变量来解决您的问题,因为在REST意识形态中,在资源名称" http://../resource/id "和HTTP参数用于过滤之后传递资源ID .
如果您需要通过HTTP参数传递ID,请参阅下面的示例:
这是你的Spring MVC控制器方法:
@RequestMapping(value = "/books", params = "ids", method = RequestMethod.GET)
@ResponseBody
Object getBooksById_params(@RequestParam List<Integer> ids) {
return "ids=" + ids.toString();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用下一个变种拨打电话:
另请参阅此讨论:https://stackoverflow.com/a/9547490/1881761
您也可以通过路径变量传递ID,请参阅下面的示例:
@RequestMapping(value = "/books/{ids}", method = RequestMethod.GET)
@ResponseBody
Object getBooksById_pathVariable(@PathVariable List<Integer> ids) {
return "ids=" + ids.toString();
}
Run Code Online (Sandbox Code Playgroud)
你的电话将是这样的:http:// server:port/ctx/books/5,65,42
GET HTTP 调用的优点:它始终用于检索数据。(从这个角度来看:我们应该为每个检索实现)
通过HTTP参数
如果您需要通过 HTTP 参数传递您的 id,请参阅下面的示例:
这是您的 Spring MVC 控制器方法:
@RequestMapping(value = "/book", params = "ids", method = RequestMethod.GET)
@ResponseBody
Object getBooksById_params(@RequestParam List<Integer> ids) {
return "ids=" + ids.toString();
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但对于特殊情况:假设 URI 超过 2048 个字符。这意味着列表中有很多 Id(例如:1000)
然后它会抛出异常:返回 414 (Request-URI Too Long)
这是http://www.checkupdown.com/status/E414.html
经过一番研究,我的理解是:HTTP 协议不会对 URI 的长度设置任何先验限制。服务器必须能够处理它们所服务的任何资源的 URI,并且如果它们提供可以生成此类 URI 的基于 GET 的表单,则应该能够处理无限长度的 URI。如果 URI 长于服务器可以处理的长度,服务器应该返回 414(Request_URI Too Long)状态。
我还浏览过类似的网站来获取 GET URI 长度:
因此,结论是,当运行时可能存在可变 URI 长度时,请坚持使用 POST 调用,以免出现此类异常[返回 414(请求 URI 太长)]
归档时间: |
|
查看次数: |
24615 次 |
最近记录: |