requestmapping注解访问404_【框架】127:几个非常重要的注解
今天是劉小愛自學Java的第127天。
感謝你的觀看,謝謝你。
今天的知識點有點多,有點記不過來了。
學習內容安排如下:
- 使用注解優化昨天寫的springMVC入門程序。
- 映射路徑各種風格的學習,也就對應了注解@RequestMapping中的參數。
- 各種類型的請求參數獲取。
- 整篇都是圍繞著各種注解的使用,做個整合,以后那個忘了做個回顧。
一、注解簡化代碼
昨天寫了一個springMVC入門程序,將其運行流程梳理了一遍,但是代碼編寫太麻煩了。
1存在的問題
①問題一
映射器、適配器、處理器,視圖解析器,一堆的信息需要配置。
②問題二
看到new關鍵字,就可以使用spring優化,具體在文章第三節中有詳細說明。
一個處理器類只能處理一個請求,并且這個類還要在配置文件中配置。
這個問題我們以前學servlet的時候就遇到過,當時我們是創建一個BaseServlet,再使用反射,讓其子類一個方法對應一個請求。
這里的解決方式是使用注解。
2注解的使用
①配置注解
- 開啟注解掃描:這個在學spring框架的時候就用過很多次了。
- mvc注解驅動:這個就相當于自動配置映射器、適配器了。
②處理器類
@Controller:這個注解即相當于將這個處理器類存放到了spring容器中。
@RequestMapping("/show"):在每個方法上使用這個注解就可以接受一個請求。
方法名我們可以自定義,有多個請求就可以創建多個對應的方法。
我大膽地猜測一下,該注解的底層實現也是使用的反射,當然目前就不做深入研究了。
其中:"/show"就對應著訪問路徑,當然在瀏覽器訪問時要在路徑后面加上.do。
二、不同風格的映射路徑
一共有好幾種,依次說明。
1Ant風格的映射
Ant也就是螞蟻的意思,符號“*”不就像一只螞蟻么?大概這就是它名稱的由來。
①通配符:?
代表可以使用任意一個字符。
例子中路徑配置的是“a?”,那么ab、ac、a加任意一個字符都可以訪問。
②通配符:*
代表了0個或者多個字符。
例子中路徑配置的是“a*”,那么abcdd、afa都可以訪問,甚至單獨的一個a也可以。
其中當*單獨使用的時候只能配置一個或者多個的字符,0個就不行了。
③通配符:**
代表了0個或者多個路徑。
例子中路徑配置的是“**”,那么隨便多個路徑都可以,沒有路徑也行。
其中當**和其它字符一起使用時就不能多個路徑了,代表0或多個字符,和*作用一樣。
2占位符的映射(restful風格)
restful風格厲害的地方在于:路徑中輸入的字符可以作為參數被取出來。
使用注解@PathVariable
該注解可以獲取路徑中的字符作為參數
不過值得注意的是:
@PathVariable(“key”)中的key必須和對應占位符中的參數名保持一致。
如果傳遞的參數類型和接受參數的形參類型不一致,則會自動轉換。比如上圖年齡傳了“18”字符串,方法形參使用Integer來接受參數。
3限定請求方法的映射
這種方式就是可以限定方法的請求類型,比如我們只接受GET請求:
@RequestMapping(value=””,method=””)
使用RequestMethod.GET設定請求方式為GET請求,如果是POST請求就不行了。
我們點擊RequestMethod的源碼可以發現,其一共有8種請求類型,都是以枚舉的形式存在,自己指定需要限制的請求方式即可。
4限定請求參數的映射
@RequestMapping(value=””,params=””)
和限定請求方法很像,就是將method換成了params,名稱都是見名知義的。
①params=”id”
請求參數中必須有id,如果沒有id會報錯。
與之相反的是:如果params=”!id”表示請求參數中不能包含id,如果有id會報錯。
②params=”id=1”
請求參數中id必須為1,如果不為1會報錯。
與之相反的是:如果params=”id!=1”表示請求參數中id必須不為1,如果等于1會報錯。
③params={“name”, ”age”}
請求參數中必須有name,age參數,當然有多余的其它參數也行,但這兩個必須要有。
5混合注解
@GetMapping:限定請求方式必須要為GET請求才行,就相當于:@RequestMapping用method=RequestMethod.GET。
類似的注解還有@PostMapping、@PutMapping、@DeleteMapping。
值得注意的是:
上述例子中,①和②分開使用都可以達到效果,如果放在一起會報錯。
三、接收數據及數據綁定
1接收servlet的內置對象
常用的servlet對象一共有三個:request,response,session。
這些對象的接收非常簡單,只需要在方法形參中有該對象就能接收,不需要任何配置。
2springMVC的Model對象
我們前面使用ModelAndView,每次都要new對象,既然學了spring,肯定能優化。
springMVC的Model對象就是用來代替ModelAndView的:
- addAtrribute()就相當于addObject()
- 返回字符串就相當于設定ViewName的值。
注意:①和②不能放在一起聯合使用,我這邊只是做一個對比說明它們是一回事。
3接收普通的請求參數
也就是@RequestParam這個注解的使用,這個注解非常重要,使用起來也方便。
①required=false
有false,自然是有true的。如果不寫的話,默認就是ture,我這邊為了說明寫了false。
- true:表示請求參數必須要有name,如果沒有就會報錯。
- false:表示請求參數可以沒有name,如果沒有就顯示null。
②defaultValue=""
看名稱就很好理解,這個是指定一個默認值,如果不指定參數就用這個默認值。
其中關于注解@PathVariable和其很類似,這個在rest風格映射路徑中說明。
如果請求路徑中攜帶有參數可以使用注解@PathVariable,如果參數并不在請求路徑中(POST請求)可以使用@RequestParam。
4獲取cookie
@CookieValue這個注解的使用
我們在使用瀏覽器的時候,如果多次請求,請求參數中會存在一個cookie。
可以通過@CookieValue獲取cookie的值,其中其key為一個固定值JSESSIONID。
最后
還有幾種數據類型沒時間學了,比如實體類對象、集合這些。
我擦咧,一個知識點不能整合在一起有點難受,看來時間管理不行啊,得跟羅志祥學學了,真不知道他是怎么安排過來的。
謝謝你的觀看。
如果可以的話,麻煩幫忙點個贊,謝謝你。
總結
以上是生活随笔為你收集整理的requestmapping注解访问404_【框架】127:几个非常重要的注解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python win32ui选取文件夹_
- 下一篇: python提供什么机制处理程序运行错误