語境:我想編寫一個端點,它將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條經驗 獲得超8個贊
POST
在這種情況下看起來更干凈,因為 -
在 URL 中發送一個巨大的字符串不是一個好主意,并且存在錯誤的余地
您需要編寫額外的代碼(邏輯)來在前端創建字符串并在后端拆分它。
在 URL 中發送一個巨大的字符串是不可擴展的,因為 URL 的長度是有限制的。

RISEBY
TA貢獻1856條經驗 獲得超5個贊
我同意上面給出的所有答案。我想再指定一點,如果您要發布請求,則可能必須增加服務器可以接收的有效負載容量,spring boot 的默認發布容量(最大字節數)為 2mb(基于您的服務器) )。雖然測試您的代碼可能適用于 1000-2000 個用戶名,但請確保更改該屬性以接受請求中的更多字節。
添加回答
舉報
0/150
提交
取消