語境:我想編寫一個(gè)端點(diǎn),它將Collection根據(jù)用戶名返回一個(gè)用戶。這些用戶名應(yīng)該如何傳遞到 REST 端點(diǎn) -請注意,我可以(可能)有很多用戶名(比如 > 5000)?解決方案#1:使用GET端點(diǎn),連接客戶端的用戶名并將它們作為單個(gè)請求參數(shù)傳遞。在服務(wù)器端拆分請求參數(shù)以獲取用戶名列表。@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端點(diǎn)并將用戶名列表作為請求正文傳遞。雖然從編碼的角度來看更清晰,但我最終使用 aPOST來獲取數(shù)據(jù)。@RestControllerpublic class UserController { @PostMapping public Collection<User> getUser(@RequestBody List<String> usernames) { return userService.getUsersByUsername(usernames); }}問題:這兩種解決方案中的哪一種是更好的方法?您是否有更好的方法將用戶名列表傳遞到端點(diǎn)?編輯:我已經(jīng)根據(jù)答案中的建議更新了第一個(gè)解決方案的簽名。春天是能夠反序列化filename1,filename2,列出對框@RequestParam。
3 回答

慕田峪9158850
TA貢獻(xiàn)1794條經(jīng)驗(yàn) 獲得超7個(gè)贊
POST
在這種情況下看起來更干凈,因?yàn)?-
在 URL 中發(fā)送一個(gè)巨大的字符串不是一個(gè)好主意,并且存在錯(cuò)誤的余地
您需要編寫額外的代碼(邏輯)來在前端創(chuàng)建字符串并在后端拆分它。
在 URL 中發(fā)送一個(gè)巨大的字符串是不可擴(kuò)展的,因?yàn)?URL 的長度是有限制的。

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