Spring MVC@RequestMapping 方法所支持的參數(shù)類型和返回類型
@RequestMapping方法方法所支持的常見參數(shù)類型:
1囤锉、請(qǐng)求或響應(yīng)對(duì)象(Servlet API)坦弟⌒桶拢可以是任何具體的請(qǐng)求或響應(yīng)類型的對(duì)象淡诗,比如畜晰,ServletRequest或HttpServletRequest對(duì)象吕世。
2叹阔、HttpSession類型的會(huì)話對(duì)象(Servlet API)砍濒。使用該類型的參數(shù)將要求這樣一個(gè)session的存在铐懊,因此這樣的參數(shù)永不為null朽缴。
3沧侥、當(dāng)前請(qǐng)求的地區(qū)信息java.util.Locale可霎,由已配置的最相關(guān)的地區(qū)解析器解析得到。
4宴杀、java.util.TimeZone(java 6以上的版本)/java.time.ZoneId(java 8)癣朗,由LocaleContextResolver解析得到
5、org.springframework.http.HttpMethod旺罢】跤啵可以拿到HTTP請(qǐng)求方法
包裝了當(dāng)前被認(rèn)證用戶信息的
java.security.Principal
6、帶@PathVariable標(biāo)注的方法參數(shù)扁达,其存放了URI模板變量中的值正卧。
7、帶@RequestParam標(biāo)注的方法參數(shù)跪解,其存放了Servlet請(qǐng)求中所指定的參數(shù)炉旷。參數(shù)的值會(huì)被轉(zhuǎn)換成方法參數(shù)所聲明的類型。
8叉讥、帶@RequestHeader標(biāo)注的方法參數(shù)窘行,其存放了Servlet請(qǐng)求中所指定的HTTP請(qǐng)求頭的值。參數(shù)的值會(huì)被轉(zhuǎn)換成方法參數(shù)所聲明的類型图仓。
9罐盔、帶@RequestBody標(biāo)注的參數(shù),提供了對(duì)HTTP請(qǐng)求體的存取救崔。參數(shù)的值通過HttpMessageConverter被轉(zhuǎn)換成方法參數(shù)所聲明的類型惶看。
10、帶@RequestPart標(biāo)注的參數(shù)帚豪,提供了對(duì)一個(gè)"multipart/form-data請(qǐng)求塊(request part)內(nèi)容的存取碳竟。
11、HttpEntity類型的參數(shù)狸臣,其提供了對(duì)HTTP請(qǐng)求頭和請(qǐng)求內(nèi)容的存取。請(qǐng)求流是通過HttpMessageConverter被轉(zhuǎn)換成entity對(duì)象的昌执。
12烛亦、java.util.Map/org.springframework.io.Model/org.springframework.ui.ModelMap類型的參數(shù)诈泼,用以增強(qiáng)默認(rèn)暴露給視圖層的模型(model)的功能
13、org.springframework.web.servlet.mvc.support.RedirectAttributes類型的參數(shù)煤禽,用以指定重定向下要使用到的屬性集以及添加flash屬性
14铐达、命令或表單對(duì)象,它們用于將請(qǐng)求參數(shù)直接綁定到bean字段(可能是通過setter方法)檬果。你可以通過@InitBinder標(biāo)注和/或HanderAdapter的配置來定制這個(gè)過程的類型轉(zhuǎn)換瓮孙。
15、RequestMappingHandlerAdapter類webBindingInitializer屬性的文檔选脊。這樣的命令對(duì)象杭抠,以及其上的驗(yàn)證結(jié)果,默認(rèn)會(huì)被添加到模型model
16恳啥、org.springframework.validation.Errors / org.springframework.validation.BindingResult驗(yàn)證結(jié)果對(duì)象偏灿,用于存儲(chǔ)前面的命令或表單對(duì)象的驗(yàn)證結(jié)果(緊接其前的第一個(gè)方法參數(shù))。
17钝的、org.springframework.web.bind.support.SessionStatus對(duì)象翁垂,用以標(biāo)記當(dāng)前的表單處理已結(jié)束。這將觸發(fā)一些清理操作:@SessionAttributes在類級(jí)別標(biāo)注的屬性將被移除
18硝桩、org.springframework.web.util.UriComponentsBuilder構(gòu)造器對(duì)象沿猜,用于構(gòu)造當(dāng)前請(qǐng)求URL相關(guān)的信息,比如主機(jī)名碗脊、端口號(hào)啼肩、資源類型(scheme)、上下文路徑望薄、servlet映射中的相對(duì)部分(literal part)等
@RequestMapping方法方法支持的常見返回類型:
1疟游、ModelAndView對(duì)象,其中model隱含填充了命令對(duì)象痕支,以及標(biāo)注了@ModelAttribute字段的存取器被調(diào)用所返回的值颁虐。
2、Model對(duì)象卧须,其中視圖名稱默認(rèn)由RequestToViewNameTranslator決定另绩,model隱含填充了命令對(duì)象以及標(biāo)注了@ModelAttribute字段的存取器被調(diào)用所返回的值
3、Map對(duì)象花嘶,用于暴露model笋籽,其中視圖名稱默認(rèn)由RequestToViewNameTranslator決定,model隱含填充了命令對(duì)象以及標(biāo)注了@ModelAttribute字段的存取器被調(diào)用所返回的值
4椭员、View對(duì)象车海。其中model隱含填充了命令對(duì)象,以及標(biāo)注了@ModelAttribute字段的存取器被調(diào)用所返回的值隘击。handler方法也可以增加一個(gè)Model類型的方法參數(shù)來增強(qiáng)model
5侍芝、String對(duì)象研铆,其值會(huì)被解析成一個(gè)邏輯視圖名。其中州叠,model將默認(rèn)填充了命令對(duì)象以及標(biāo)注了@ModelAttribute字段的存取器被調(diào)用所返回的值棵红。handler方法也可以增加一個(gè)Model類型的方法參數(shù)來增強(qiáng)model
6、void咧栗。如果處理器方法中已經(jīng)對(duì)response響應(yīng)數(shù)據(jù)進(jìn)行了處理(比如在方法參數(shù)中定義一個(gè)ServletResponse或HttpServletResponse類型的參數(shù)并直接向其響應(yīng)體中寫東西)逆甜,那么方法可以返回void。handler方法也可以增加一個(gè)Model類型的方法參數(shù)來增強(qiáng)model
如果處理器方法標(biāo)注了ResponseBody致板,那么返回類型將被寫到HTTP的響應(yīng)體中交煞,而返回值會(huì)被HttpMessageConverters轉(zhuǎn)換成所方法聲明的參數(shù)類型。
7可岂、HttpEntity或ResponseEntity對(duì)象错敢,用于提供對(duì)Servlet HTTP響應(yīng)頭和響應(yīng)內(nèi)容的存取。對(duì)象體會(huì)被HttpMessageConverters轉(zhuǎn)換成響應(yīng)流缕粹。
HttpHeaders對(duì)象稚茅,返回一個(gè)不含響應(yīng)體的response
如果返回類型不是Spring MVC默認(rèn)識(shí)別的類型,則會(huì)被處理成model的一個(gè)屬性并返回給視圖平斩,該屬性的名稱為方法級(jí)的@ModelAttribute所標(biāo)注的字段名(或者以返回類型的類名作為默認(rèn)的屬性名)亚享。model隱含填充了命令對(duì)象以及標(biāo)注了@ModelAttribute字段的存取器被調(diào)用所返回的值