背景
之前寫一個接口的時候沒有察覺到將@RequestBody這個注解帶到service層了。
今天提交代碼的時候,插件沒有檢測到這個低級錯誤,導致試飛構建連maven編譯都過不了,maven找不到程序包org.springframework.web.bind.annotation這個包
結果
試飛構建不成功
背后原因
如果將@RequestBody
寫在 Service層會出現的問題
- 編譯錯誤:
Service 層通常是業務邏輯層,它不直接處理 HTTP 請求。@RequestBody
是 Spring MVC 用于處理 HTTP 請求的注解,它依賴于 Spring MVC 的請求處理機制。如果在 Service 層使用@RequestBody
,會導致編譯錯誤,因為 Service 層沒有相應的請求處理上下文來解析這個注解。 - 邏輯混亂:
從設計模式和分層架構的角度來看,這違背了職責分離原則。控制器層應該負責接收和解析 HTTP 請求,將請求數據轉換為業務邏輯層(Service 層)可以理解的對象形式,然后將這些對象傳遞給 Service 層進行業務處理。如果在 Service 層處理請求體的綁定,會使 Service 層與 HTTP 請求細節耦合,導致代碼難以維護和測試。例如,在單元測試 Service 層時,不應該涉及 HTTP 請求相關的內容,而@RequestBody
的存在會引入這些不相關的因素。 - 無法正常工作:
即使通過一些不合理的方式(如在不適當的上下文中強制加載 Spring MVC 相關的組件)讓代碼能夠編譯通過,@RequestBody
在 Service 層也無法正確地獲取和解析 HTTP 請求體中的數據,因為它不在請求處理的流程中。它缺少 Spring MVC 的DispatcherServlet等組件對請求的分發和處理環境。
結語
希望uu們不會和我一樣犯這種低級錯誤(●′ω`●)ゞ