一、@Controller & @RestController
這兩個是 Spring MVC 給我們提供的常用控制器,這兩個東西一般用在類上,通過它倆,可以聲明出這個類是控制器類。
控制器會交由給 Spring 容器做管理。
它倆相同的是他們都是可以聲明控制器,不同的是 RestController 是一個無頁面傳回的控制器。
RestController = ResponseBody + Controller
如果我們使用了 RestController,那麼我們就沒有辦法傳回到頁面,隻能給請求傳回資料。
類似于 ajax 的請求一樣,不做頁面跳轉,僅擷取資料。
寫個例子感受一下。
修改一下之前的 hello.html
然後建立兩個控制器
ok哈,然後我們在修改一下 web.xml
啟動項目,我們來進行測試
可以看到啊,是正常通路,現在點選 Controller
可以看到哈,跳轉了,直接跳轉到了我們的 hello.jsp 中了。
傳回再去點選 RestController
可以看到,直接将這個字元串傳回回來了,并沒有跳轉頁面。
後期我們可以使用這個 RestController 做異步互動,沒有頁面傳回,直接傳回資料。
RestController 的出現是為了讓我們程式員少寫 @ResponseBody
二、@RequestBody & @RequestParam
在之前學習 Servlet 的時候,我們使用 request.getParameter 接收參數,可以說是比較費勁了,得需要一個一個寫,引入了這個 SpringMVC 之後,我們就不需要寫那麼多 request 了。
@RequestBody 主要是接收請求體中的參數。拿到從前端頁面傳遞來的請求參數後,Spring MVC 會自動幫我們解析,并且綁定到我們的實體上去。
@RequestParam 主要是接收請求的 url 中的參數。同樣哈,這個也會自動幫我們綁定。
來感受一下
我們使用 Postman 來進行接口調試,不會 Postman 可以看我的部落格,簡單學習一下:postman 使用詳解
@RequestBody
先去建立一個實體,我們一會要用(順便自己弄一下 get、set、toString)
然後我們開始寫請求的 API 接口
我們就弄個簡單的輸出,就不弄 service 了。
當然,弄好這些還是不可以的,因為我們還需要三個 jar 包,沒有的話會報錯。
就這三個,自己去 maven 倉庫下載下傳,然後弄到項目中的 lib 目錄中。
然後我們通過 Postman 調試一下。啟動項目,打開 Postman。
然後問我們點選 Send
可以看到,伺服器端報錯了,我們看看錯誤。
大緻的意思就是我們的這個日期傳遞進來不合适,是以我們需要進行入參轉換。打開 Student 這個類,然後我們在日期上加注解。
加上之後,我們從新啟動 tomcat,然後再來用 Postman 請求~~
是OK的哈,我們把參數都傳遞進來了~~~
當然哈,不相信我們可以去掉這個 @RequestBody 這個注解,從新啟動項目,再試試
可以看到哈,沒有任何東西~
@RequestParam
這個其實比較簡單,我們也來寫一個例子
我們從新啟動伺服器,測試一下
send 一下
是沒有問題的哈。
但是,如果我們沒有傳遞 id,我們再來看看這個方法
伺服器端報錯了。這個是因為伺服器端預設是我們一定會傳遞 id 這個參數的,如果沒有傳遞那麼久會報錯的。
當然哈,Spring MVC 早就給你想到解決方案了,來看一下。
加這個 required 是為了讓規定這個 id 的參數可以不是必須的,當我們設定成 false,也就是說我們可以傳遞,可以不傳遞,預設的情況是 true,是必須要傳遞的。
這裡我們從新啟動伺服器,再來測試一下
可以的,是沒有問題的哈。
三、ModelAndView
這個 ModelAndView 是我們以後也比較常用的一個類,這個類是用來傳回視圖還有資料的。
來寫一個例子感受一下。
ModelAndView 中有一個 addObject 的方法,這個方法類似 HttpServletRequest 中的 setAttribute 方法,前面的參數是 key,後面的是 value。
ModelAndView 中還有一個方法是 setViewName,這個是傳回的視圖的名字,這裡我們隻需要填寫傳回的視圖的名稱即可,因為規則我們在 springmvc.xml 中配置了。
到時候我們請求 路徑/mav/test 之後會帶着兩個傳回的請求值,跳轉到 mav.jsp 頁面。
我們再來建立一個 mav.jsp 頁面,在 WebContent 下面。
頁面中擷取我們後端傳遞過來的值同樣是使用 EL 表達式。
從新啟動伺服器,來測試一下。
是OK的,沒有問題。
本篇東西有點多,大家自己好好聯系一下,因為這些東西以後我們都常用。
最近我的個人網站在從新搭建,準備換架構,如果有小夥伴有什麼提議,加點什麼内容,可以直接私聊我的 CSDN 賬号,或者 QQ :2100363119