一、接口聲明的穩定性
?
- 接口聲明不能輕易變:接口是前后端、服務間通信的約定。要是接口的 URL、請求方法、參數、返回值變了,調用方(比如前端、其他服務)就得跟著改,容易出問題。所以設計接口要謹慎,別老變動。
?
二、SpringMVC 接口示例
?
- 請求 URL:?http://127.0.0.1:8080/request/6&sa=lyb_n_homepage?
- ?127.0.0.1? 是本地地址,?8080? 是 Tomcat 端口,?/request/6? 是 URL 路徑,?sa=lyb_n_homepage? 是查詢參數(?sa? 是參數名,?lyb_n_homepage? 是參數值)。
- Controller 代碼:
@RequestMapping("/rs")
public String rc(@RequestParam("sa") String resource) {
? ? return "接收到參數 resource: " + resource;
}
?
?
- ?@RequestMapping("/rs")?:把 ?/rs? 路徑映射到這個方法,支持 GET、POST 等請求。
- ?@RequestParam("sa")?:把請求中名為 ?sa? 的參數綁定到 ?resource? 變量。
- 必傳 vs 非必傳:默認 ?required = true?(必傳),如果改成 ?@RequestParam(value = "sa", required = false)?,就是非必傳,沒傳 ?sa? 參數也不會報錯。
- 返回值:方法返回字符串,會直接返回給客戶端(比如瀏覽器顯示“接收到參數 resource: lyb_n_homepage”)。
?
三、JSON 與 Java 對象轉換庫
?
- Jackson:SpringBoot 默認的 JSON 處理庫,能把 Java 對象轉成 JSON,也能把 JSON 轉成 Java 對象。
- Fastjson/Fastjson2:阿里巴巴出的庫,性能好,API 簡單,很多企業在用。
- Gson:Google 出的庫,功能全,也很好用。
?
四、網絡編程與 SpringMVC 注解
?
網絡編程三步驟
?
1.?客戶端和服務端建立連接:比如瀏覽器和 Tomcat 服務器通過 TCP 三次握手建立連接。
2.?客戶端發請求:瀏覽器發 HTTP 請求(包含 URL、請求方法、頭信息、參數等)。
3.?服務端收請求并響應:Tomcat 收請求,SpringMVC 處理,再返回響應(比如 HTML 頁面、JSON 數據)。
?
@RequestMapping 注解
?
- 作用:既可以標記類,也可以標記方法,用來映射 URL 路徑。
- 標記類:類上的 ?@RequestMapping? 是父路徑,方法上的是子路徑,組合起來就是完整的 URL。
- 標記方法:直接映射方法到 URL。
- 支持的請求方法:默認支持 GET、POST 等,也可以用 ?method? 屬性指定(比如 ?method = RequestMethod.GET? 只支持 GET)。
- 路徑不能重復:如果有兩個相同的 URL 映射,啟動時會報 ?Ambiguous mapping? 錯誤(比如兩個方法都映射到 ?/hello?)。
?
請求方法不支持的錯誤
?
- 錯誤信息:
- 日志:?Resolved [org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported]?
- 頁面:?Whitelabel Error Page?,狀態碼 405(Method Not Allowed)。
- 原因:比如接口只支持 GET,你用 POST 請求,就會報這錯。
?
@RequestMapping 的屬性
?
- value 屬性:指定 URL 路徑,是默認屬性。如果注解里只有 ?value?,可以省略 ?value =?,比如 ?@RequestMapping("/hello")?。
- method 屬性:指定支持的請求方法,比如 ?RequestMethod.GET?、?RequestMethod.POST?。
- 示例:
- ?@RequestMapping(value = "/v1", method = RequestMethod.GET)?:只支持 GET 請求,路徑是 ?/v1?。
- ?@RequestMapping(value = "/v2", method = {RequestMethod.GET, RequestMethod.POST})?:同時支持 GET 和 POST 請求。
?
五、參數綁定問題
?
- 類型轉換錯誤:比如方法參數是 ?int age?,但請求沒傳 ?age?,或者傳了非數字,會報 ?NumberFormatException? 或 ?MethodArgumentTypeMismatchException?。
- 解決:把參數類型改成包裝類(比如 ?Integer age?),這樣沒傳參數時 ?age? 是 ?null?,不會報錯。
- 參數順序無關,名稱要一致:方法參數名要和請求參數名一致,順序沒關系。比如方法 ?public String test(String name, String password)?,請求參數 ?name=zhangsan&password=123? 能正確綁定,改成 ?password=123&name=zhangsan? 也能綁定。
?
六、總結
?本節從接口設計、SpringMVC 注解、JSON 轉換到網絡編程基礎、參數綁定,把 Web 開發的核心知識點串了起來。理解這些內容,能幫你搞定接口開發、前后端聯調、錯誤排查等問題,在實際項目中少踩坑。
?