javascript
【spring学习笔记】(二)Spring MVC注解配置 参数转换注解@RequestMapping@RequestParam、@PathVariable@MatrixVariable
@TOC
介紹
在Spring MVC項目中,<\context:component-scan>配置標簽還會開啟@Request-Mapping、@GetMapping等映射注解功能(也就是會注冊RequestMappingHandler-Mapping和RequestMappingHandlerAdapter等請求映射和處理等組件),但是< context:component-scan>不支持數據轉換或驗證等注解功能。 Spring MVC提供了<\mvc:annotation-driven/>配置標簽用于全面開啟MVC相關的注解功能,該配置會注冊用于處理請求映射相關的組件,支持請求注解映射注解(@Request-Mapping、@GetMapping和@PostMapping等)和參數轉換注解(@RequestParam、@PathVariable和@ModelAttribute等)。
注冊的組件類型包括:
·RequestMappingHandlerMapping:請求映射處理器映射器; ·RequestMappingHandlerAdapter:請求映射處理器適配器; ·ExceptionHandlerExceptionResolver:處理異常信息的異常解析器。
除此之外,< mvc:annotation-driven/>配置還會加載一些數據轉換支持的注解實現類,包括:
·支持使用了ConversionService的實例對表單參數進行類型轉換;
·支持使用@NumberFormat、@NumberFormat注解的作用是對數據類型進行格式化
·支持使用@Valid對JavaBean進行JSR-303驗證;
·支持JSON數據類型轉換注解@RequestBody和@ResponseBody。
組件注解
與Spring核心容器一致,配置< context:component-scan>就可以自動掃描和注冊對應包下的組件和依賴注入的注解。相比@Component的通用組件注解,Spring MVC項目中可以使用對應不同層級更為精確的組件注解,具體使用如下: ·@Controller:控制器組件;
·@Service:服務組件;
·@Repository:DAO組件;
·@Component:組件的泛型,使用于不好歸類的組件類,如一些用于和配置文件對應的類。
請求映射與參數注解
請求映射注解可以使用在類和方法上,基本的注解是@RequestMapping,根據不同的請求類型有不同的子注解,類似@GetMapping、@PostMapping,特定請求注解只接受特定類型的HTTP請求方法,而@RequestMapping可以通用。
參數注解包括請求參數
@RequestParam和路徑變量
@PathVariable等。
@RequestMapping:請求映射注解 @RequestMapping可以使用在@Controller注解類的類和方法中。應用在類中作為請求路徑的前綴,結合方法中的路徑組成完整的請求路徑.
@RequestMapping后面可以直接指定路徑,也可以使用value屬性來指定路徑。@RequestMapping是一個通用類型的請求映射,可以對應不同類 型的請求(Spring中使用RequestMethod枚舉類維護請求類型),包括GET、HEAD、POST、PUT、PATCH、DELETE、OPTIONS和TRACE。method屬性用于指定匹配不同類型的請求,例如: @RequestMapping(value="/helloWithParamObject",method=RequestMethod.GET)
等同于
@GetMapping (value="/helloWithParamObject")
Spring MVC提供了不同類型的子注解可以直接使用,包括@GetMapping、@Post-Mapping、@PutMapping、@DeleteMapping和@PatchMapping。
請求內容的類型配置
在請求映射注解中,可以通過consumes和produces屬性指定請求和返回的媒體格式類型。
·consumes:處理請求的提交內容類型(Content-Type),例如application/json、text/html。使用此屬性可以縮小請求映射的范圍。consumes也支持反向表達,比如!text/plain,指除text/plain以外的任何內容類型。
·produces:返回的內容類型
設置@RequestMapping等注解的headers屬性,可以限定映射包含此請求頭參數的請求,縮小映射方法的映射范圍。
@RequestParam
@RequestParam使用在映射方法的形參中,用來匹配一些簡單類型和沒有被其他參數解析器解析的請求參數。默認情況下,請求參數與映射方法參數需要同名,如果在請求參數或請求體中不存在同名的參數,則會出錯。也就是說,默認@RequestParam注解的參數是必須傳值的,否則會拋出異常,請求處理的方法也不會執行??梢酝ㄟ^設置required屬性為false取消這個限制,還可以通過value屬性設置映射到的前端請求的參數名。例如:
@RequestMapping("/helloWithParam") //映射注解public ModelAndView helloWithParam(@RequestParam(value="userName",required=true) String userName) { //value指定前端請求參數名,required必須檢查ModelAndView modelAndView = new ModelAndView(); //模型視圖對象初始化modelAndView.setViewName("hello"); //設置視圖名return modelAndView; //返回視圖模型對象}請求參數可以通過GET方式直接在URL中傳入,也可以通過POST方式傳入。GET在URL中傳遞的示例如
下: /anno-demo/helloWithParam?userName=Oscar
注意:required不設置,默認參數是必須傳值的,所以一般參數非必須時才進行required=false的設置。 映射方法參數的@RequestParam也可以不使用,容器會根據參數名稱自動進行匹配。如果方法參數是一個對象類型的話,容器還會將請求中的參數自動裝箱,也就是創建該類型的對象,并將前端傳遞的參數自動匹配到對象的屬性中。舉例來看注解方法的定義如下:
在使用地址/anno-demo/helloWithParamObject?name=Oscar請求時,映射方法的User類型的參數對象會被創建,并且會把前端的name值設置給對象。
路徑變量注解:@PathVariable
@PathVariable注解使用在映射方法參數中,用來綁定映射注解中的URL占位符的值并賦給該參數,占位符使用{}的格式。示例如下:
//包含占位符的映射配置@RequestMapping(value="/helloPathVariable/{userName}")//參數路徑映射public ModelAndView helloPathVariable(@PathVariable String userName) { //方法體略}當使用/helloPathVariable/user1進行請求訪問時,會將路徑中的user1的值綁定給上面方法中的參數。
@PathVariable和@RequestParam都是用來傳遞參數的,@PathVariable常用在REST風格請求的服務中。
矩陣變量注解:@MatrixVariable
在使用@PathVariable注解映射路徑變量時,可以結合@MatrixVariable注解在請求URL路徑中附加鍵值對方式的參數傳遞,路徑和參數以分號(;)分隔,參數的鍵和值以等號(=)分隔。例如,請求路徑是/helloMartrixVariable/user1;id=1,這里的user1是路徑,id是鍵值對的參數。在映射方法中的寫法如下:
//包含路徑占位符的映射注解
@MatrixVariable注解的name屬性指定參數的鍵的名字,pathVar指定路徑變量的名字,在包含多個路徑變量時需要使用。如果參數的鍵和方法的@MatrixVariable注解變量同名且只有一個路徑變量時,可以省略name和pathVar屬性的配置。 同一個路徑地址,可以包含多個路徑變量。在同一個路徑變量中,可以包含多個鍵值對的參數,以分號(;)分割。@MatrixVariable注解的方法參數可以得到所有的矩陣變量,鍵值相同的會合并成集合。如果不同路徑變量中都包含同一個鍵值,在不使用pathVar指定具體哪個路徑變量的狀況下,返回的鍵值是一個集合。以某個映射注解的路徑配置為例: /depts/{deptId}/users/{userId}
該路徑有兩個路徑占位符,使用矩陣變量的請求路徑如下:
/depts/dept001;att1=value1/users/user001;att1=value11;att2=value2
使用MultiValueMap<String,String>類型的參數可以匹配所有的矩陣變量,如果指定@MatrixVariable注解的pathVar屬性,則會返回該路徑變量的所有矩陣變量,示例如下:
總結
以上是生活随笔為你收集整理的【spring学习笔记】(二)Spring MVC注解配置 参数转换注解@RequestMapping@RequestParam、@PathVariable@MatrixVariable的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【学习笔记】java基础核心总结
- 下一篇: 【练习】2021下半年数据结构刷题笔记和