猿问

REST - 下载用户列表

语境:


我想编写一个端点,它将Collection根据用户名返回一个用户。这些用户名应该如何传递到 REST 端点 -请注意,我可以(可能)有很多用户名(比如 > 5000)?


解决方案#1:


使用GET端点,连接客户端的用户名并将它们作为单个请求参数传递。在服务器端拆分请求参数以获取用户名列表。


@RestController

public 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来获取数据。


@RestController

public class UserController { 


    @PostMapping

    public Collection<User> getUser(@RequestBody List<String> usernames) {

        return userService.getUsersByUsername(usernames);

    }


}

问题:


这两种解决方案中的哪一种是更好的方法?

您是否有更好的方法将用户名列表传递到端点?

编辑:


我已经根据答案中的建议更新了第一个解决方案的签名。春天是能够反序列化filename1,filename2,列出对框@RequestParam。


慕容3067478
浏览 99回答 3
3回答

慕田峪9158850

POST&nbsp;在这种情况下看起来更干净,因为 -在 URL 中发送一个巨大的字符串不是一个好主意,并且存在错误的余地您需要编写额外的代码(逻辑)来在前端创建字符串并在后端拆分它。在 URL 中发送一个巨大的字符串是不可扩展的,因为 URL 的长度是有限制的。

RISEBY

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

相关分类

Java
我要回答