语境:我想编写一个端点,它将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
在这种情况下看起来更干净,因为 -
在 URL 中发送一个巨大的字符串不是一个好主意,并且存在错误的余地
您需要编写额外的代码(逻辑)来在前端创建字符串并在后端拆分它。
在 URL 中发送一个巨大的字符串是不可扩展的,因为 URL 的长度是有限制的。
RISEBY
TA贡献1856条经验 获得超5个赞
我同意上面给出的所有答案。我想再指定一点,如果您要发布请求,则可能必须增加服务器可以接收的有效负载容量,spring boot 的默认发布容量(最大字节数)为 2mb(基于您的服务器) )。虽然测试您的代码可能适用于 1000-2000 个用户名,但请确保更改该属性以接受请求中的更多字节。
添加回答
举报
0/150
提交
取消