为了账号安全,请及时绑定邮箱和手机立即绑定

REST - 下载用户列表

REST - 下载用户列表

慕容3067478 2021-10-28 10:00:57
语境:我想编写一个端点,它将Collection根据用户名返回一个用户。这些用户名应该如何传递到 REST 端点 -请注意,我可以(可能)有很多用户名(比如 > 5000)?解决方案#1:使用GET端点,连接客户端的用户名并将它们作为单个请求参数传递。在服务器端拆分请求参数以获取用户名列表。@RestControllerpublic class UserController {     @GetMapping    // able to deserialize `filename1,filename2` to List out of the box    public Collection<User> getUser(@RequestParam List<String> usernames) {        return userService.getUsersByUsername(usernames);    }}解决方案#2:使用POST端点并将用户名列表作为请求正文传递。虽然从编码的角度来看更清晰,但我最终使用 aPOST来获取数据。@RestControllerpublic class UserController {     @PostMapping    public Collection<User> getUser(@RequestBody List<String> usernames) {        return userService.getUsersByUsername(usernames);    }}问题:这两种解决方案中的哪一种是更好的方法?您是否有更好的方法将用户名列表传递到端点?编辑:我已经根据答案中的建议更新了第一个解决方案的签名。春天是能够反序列化filename1,filename2,列出对框@RequestParam。
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

POST 在这种情况下看起来更干净,因为 -

  1. 在 URL 中发送一个巨大的字符串不是一个好主意,并且存在错误的余地

  2. 您需要编写额外的代码(逻辑)来在前端创建字符串并在后端拆分它。

  3. 在 URL 中发送一个巨大的字符串是不可扩展的,因为 URL 的长度是有限制的。


查看完整回答
反对 回复 2021-10-28
?
RISEBY

TA贡献1856条经验 获得超5个赞

我同意上面给出的所有答案。我想再指定一点,如果您要发布请求,则可能必须增加服务器可以接收的有效负载容量,spring boot 的默认发布容量(最大字节数)为 2mb(基于您的服务器) )。虽然测试您的代码可能适用于 1000-2000 个用户名,但请确保更改该属性以接受请求中的更多字节。


查看完整回答
反对 回复 2021-10-28
  • 3 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信