0105 springMVC開發基礎
背景
已經明確了MVC的思想和SpringMVC的基本流程,下面就都具體的mvc開發細節知識了。
@RequestMapping
springMVC核心流程中,啟動階段會把註解@RequeestMapping註解所配置的內容儲存到HandlerMapping中,然後等待請求到達。
看一下原始碼:
簡單分一下類:
方法 | 說明 |
---|---|
name,value,path | 標識控制器方法的訪問url,可以配置多個 |
method | 處理的方法,http的標準方法,比如get,post等 |
params | 引數 |
headers | 請求頭 |
consumers | 接受請求的資源型別 |
produces | 響應的資源型別 |
說明:
- url在一個系統中應該保持唯一,能正確標明資源的含義;
- springboot新增了派生的方法註解,@PostMapping @GetMapping等;
控制器引數 自定義引數轉換
在進入控制器的方法之前,會對http的引數和上下文進行解析,轉換為控制器所需的引數;
自定義引數轉換規則:適用於特殊形式的引數解析,比如第三方公司引數使用加密的方式
處理器轉換引數流程:
WebDataBinder機制:引數的轉換,引數的驗證;
介面 | 說明 |
---|---|
converter | 普通的轉換 |
GenericConverter | 陣列型別的轉換 |
formatter | 格式化 |
springboot的自動註冊引數轉換:
WebMvcAutoConfigurationAdapter類中自動註冊的程式碼:所以,只要實現了這三個介面,並被安裝到ioc中,就自動註冊到了springMVC的引數處理流程中了;
@Override
public void addFormatters(FormatterRegistry registry) {
for (Converter<?, ?> converter :
getBeansOfType(Converter.class)) {
registry.addConverter(converter);
}
for (GenericConverter converter : getBeansOfType(GenericConverter.class)) {
registry.addConverter(converter);
}
for (Formatter<?> formatter :
getBeansOfType(Formatter.class)) {
registry.addFormatter(formatter);
}
}
常規引數處理:
型別 | 說明 |
---|---|
無註解下獲取引數 | url中的引數名字跟控制器方法的引數名稱一致,並且允許為空 |
@RequestParam | 可以配置url中引數名稱,並設定是否必須,並給出預設值 |
傳遞陣列 | 陣列元素透過逗號分隔 |
傳遞json | 定義一個物件,並標註為@RequestBody |
url傳遞引數 | url引數用{}包起來,而控制器方法引數標註為@PathVariable |
獲取格式化引數 | @DateFormate @DateTimeFormate,@NumberFormate可以定義接受引數的格式 |
請求頭引數 | @RequestHeader(“x”)註解標註控制器方法 |
自定義引數解析 | 實現HttpMessageConverter介面 |
說明:
- springboot中可以透過屬性spring.mvc.date-formate來配置
資料驗證
主要是整合了JSR303驗證,採用的是Hibernate-validator機制來驗證;
常見驗證註解
註解 | 說明 |
---|---|
@NotNull | 不能為Null |
@Future | 必須是將來的日期 |
@Past | 必須是過去的日期 |
@DecimalMin @Min | 最小值 |
@DecimalMax @Max | 最大值 |
@Range | 範圍 |
必須是郵箱格式 | |
@Size | 字串的長度範圍 |
使用方式
引數方法中,引數物件前標註@Valid ,在物件Errors中可以得到校驗失敗的資訊
自定義引數校驗:
核心介面:Validator ,自定義資料校驗器需要實現該介面;
使用:註冊到WebDataBinder中;
@InitBinder註解標註的方法會在呼叫控制器之前執行;
ModelAndView 檢視和檢視解析器
在springmvc的控制器中,如果引數中使用了ModelAndView,Model,ModelMap,會自動建立資料模型
檢視是渲染資料模型展示給使用者的元件,分為邏輯檢視和非邏輯檢視,
邏輯檢視需要檢視解析器viewResolver進行進一步的定位,比如jsp檢視
而非邏輯檢視不需要進一步的定位,如MappingJacksonJsonView;
檢視介面:兩個核心方法
getContentType();
reder(model, request ,response);
自定義pdf的例子:
TODO
攔截器
springMVC的流程中,根據HandlerMapping會得到一個HandlerExecutionChain,這個物件中包含了一個控制器和一個攔截器列表;透過攔截器可以增強處理器的功能;
攔截器介面程式碼:
三個方法的執行時間相對的是控制器;
自定義攔截器步驟:
- 實現HandlerInterceptor類;
- 配置類實現 WebMvcConfigurer,註冊自定義的攔截器;
- 多個攔截器按照註冊的先後順序執行攔截;
國際化
不同地區的人,時間和語言不同,springMVC對國際化提供了很好的支援。
MessageSource來定義的;
如果resources目錄下無messages.properties檔案,不啟用國際化;
國際化解析器 | 說明 |
---|---|
AcceptHeader | 透過L瀏覽器頭來實現國際化區域 |
Fixed | 固定的國際化區域 |
Cookie | 基於Cookie來確定 |
Session | 基於Session來確定 |
檔案上傳
springMVC對檔案上傳提供了良好的支援。DispatchServlet會把檔案上傳的請求HttpServletRequest轉換為MultipartHttpServletRequest;
而它需要配置好MultipartResolver,springboot預設提供了StandardServletMultipartResolver,這個只需要依賴servlet-api包;
配置方式:
spring.servlet.multipart.enabled=true
spring.servlet.multipart.max-file-size=1MB
spring.servlet.multipart.max-request-size=10MB
控制器寫法:
@PostMapping("/upload/part")
@ResponseBody
public String uplaod(Part file){
//儲存檔案到本地或者雲服務,返回解析路徑
}
其它
不常用的springMVC相關知識點;
知識點 | 說明 |
---|---|
重定向 | 字串跳轉redirect:/xxx , addFlashAttribute(k,v)可以給redirect新增引數 |
@ControllerAdvice | 定義控制器的增強 |
@InitBinder | 定義自定義的轉換器,校驗器,在控制器執行前呼叫 |
@ModelAttribute | 增加模型的公共引數,不常用 |
@ExceptionHandler | 處理控制器的異常 |
本文由部落格一文多發平臺 釋出!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2331/viewspace-2824690/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 0105
- SpringMVC基礎原始碼分析(一)SpringMVC原始碼
- PHP 開發基礎PHP
- 【IOS開發基礎系列】Cocoa基礎專題iOS
- flume 1.8.0 開發基礎
- 並行開發基礎並行
- Go API 開發基礎GoAPI
- Oracle開發基礎-觸發器Oracle觸發器
- 基於springmvc+spring-data-jpa+dubbo開發web應用SpringMVCWeb
- 視訊開發基礎篇
- Oracle開發基礎-遊標Oracle
- Vue開發之基礎路由Vue路由
- JavaWeb開發基礎Servlet APIJavaWebServletAPI
- React基礎——更快的開發React
- 小程式開發基礎(一)
- SpringMVC【開發Controller】詳解SpringMVCController
- Springmvc全註解開發SpringMVC
- spark 基礎開發 Tips總結Spark
- Android NDK開發之JNI基礎Android
- JavaWEB開發18——基礎加強JavaWeb
- Javascript模組化開發基礎JavaScript
- iOS開發小記-基礎篇iOS
- 【Java基礎】物件導向開發Java物件
- 【Flutter】開發之基礎Widget(二)Flutter
- Mac開發基礎23-NSMenuMac
- Mac開發基礎24-NSToolbarMac
- Mac開發基礎25-NSAlertMac
- iOS開發基礎117-HybridiOS
- 樹莓派開發—基礎配置樹莓派
- SpringMVC框架和Servlet開發有啥子區別(SpringMVC優勢)SpringMVC框架Servlet
- 《Python web開發》筆記 一:網頁開發基礎PythonWeb筆記網頁
- 安卓(Android)開發基礎知識安卓Android
- 3、Pico Robot 基礎開發課程
- app,小程式開發基礎知識APP
- Java開發常見基礎題大全Java
- Xamarin圖表開發基礎教程(1)
- Flutter開發之Dart語言基礎FlutterDart
- Oracle開發基礎-異常處理Oracle