上海發(fā)布公眾號app核心關(guān)鍵詞如何優(yōu)化
SpringMvc進(jìn)階
- SpringMVC引言
- 一、常用注解
- 二、參數(shù)傳遞
- 三、返回值
SpringMVC引言
在Web應(yīng)用程序開發(fā)中,Spring MVC是一種常用的框架,它基于MVC(Model-View-Controller)模式,提供了一種結(jié)構(gòu)化的方式來構(gòu)建可維護(hù)和可擴展的應(yīng)用程序。本文將介紹Spring MVC框架的基礎(chǔ)知識和常用注解,以及參數(shù)傳遞、返回值處理和頁面跳轉(zhuǎn)等相關(guān)內(nèi)容。
一、常用注解
1.1. @RequestMapping
@RequestMapping注解用于將HTTP請求映射到控制器方法上,通過指定URL路徑和請求的方法類型來定義請求的處理。這是一個非常常用的注解,它可以靈活地匹配多種URL路徑和請求方法,為控制器方法提供請求映射規(guī)則。
@RequestMapping("/hello1")public String index(String bname,Integer bid ){
// System.out.println("hello springMvc..");log.info("簡單類型參數(shù):bname:{},bid{}",bname,bid);return "index";}
1.2. @RequestParam
@RequestParam注解用于獲取請求參數(shù)的值,可以指定參數(shù)名和默認(rèn)值。它可以用于獲取基本類型和包裝類的參數(shù),并支持參數(shù)的必填和可選設(shè)置。通過@RequestParam注解,我們可以方便地獲取和處理請求中的參數(shù)數(shù)據(jù)。
@RequestMapping("/hello3")public String hello3(@RequestParam String bname,@RequestParam(required = false) Integer bid){
// System.out.println("hello springMvc..");log.info("@requestParam:bname:{},bid{}",bname,bid);return "index";};
1.3. @RequestBody
@RequestBody注解用于接收請求體的數(shù)據(jù),并將其轉(zhuǎn)換為對應(yīng)的Java對象。通常在處理POST請求時使用,通過該注解,我們可以簡化獲取請求體數(shù)據(jù)的過程,直接將數(shù)據(jù)轉(zhuǎn)換為Java對象,方便后續(xù)的業(yè)務(wù)處理。
@RequestMapping("/hello4/{bid}")public String hello4(@PathVariable("bid") Integer bid){
// System.out.println("hello springMvc..");log.info("@PathVariable:bname:{},bid{}",bid);return "index";}
1.4. @RequestHeader
@RequestHeader注解用于獲取請求頭的值,可以指定頭部名稱和默認(rèn)值。通過該注解,我們可以方便地獲取請求中的頭部信息,并根據(jù)需要進(jìn)行相應(yīng)的處理。例如,可以獲取用戶的認(rèn)證信息、瀏覽器類型等數(shù)據(jù)。
@RequestMapping("/hello7")public String hello7( @RequestHeader("jwt") String jwt){
// System.out.println("hello springMvc..");log.info("@RequestHeader:jwt:{}",jwt);return "index";};
二、參數(shù)傳遞
在Spring MVC中,控制器方法可以接收不同類型的參數(shù),包括基礎(chǔ)類型、字符串、復(fù)雜類型等。
2.1. 基礎(chǔ)類型+String
控制器方法可以直接將基本類型和字符串作為參數(shù),Spring MVC會自動進(jìn)行類型轉(zhuǎn)換。例如,可以直接傳遞整型、字符型、布爾型等參數(shù),并在方法中進(jìn)行相應(yīng)的業(yè)務(wù)處理。
@ResponseBody@RequestMapping("/hello2")public Map hello2(HttpServletResponse response) throws Exception {Map<String,Object>map=new HashMap<>();map.put("code",200);map.put("msg","成功添加");
return map;}
2.2. 復(fù)雜類型
如果請求中包含復(fù)雜的參數(shù)結(jié)構(gòu),我們可以定義一個與之對應(yīng)的Java類,并將其作為控制器方法的參數(shù)。Spring MVC將自動將請求參數(shù)映射到該Java對象的屬性上,提供了一種方便的方式來處理復(fù)雜的參數(shù)傳遞。
@RequestMapping("/hello2")public String index(Book book, HttpServletRequest request){
// System.out.println("hello springMvc..");log.info("復(fù)雜類型參數(shù):bname:{},bid{}",request.getParameter("bname"),request.getParameter("bid"));log.info("復(fù)雜類型參數(shù):bname:{},bid{}",book.toString());return "index";}
2.3. @RequestParam
使用@RequestParam注解可以獲取請求參數(shù)的值,可以指定參數(shù)名和默認(rèn)值。這個注解適用于獲取單個參數(shù)的值,可以用于基本類型、字符串等參數(shù)的獲取。
@RequestMapping("/hello3")public String hello3(@RequestParam String bname,@RequestParam(required = false) Integer bid){
// System.out.println("hello springMvc..");log.info("@requestParam:bname:{},bid{}",bname,bid);return "index";};
2.4. @PathVariable
使用@PathVariable注解可以獲取URL路徑中的變量值,將路徑變量綁定到方法參數(shù)上。這個注解適用于RESTful風(fēng)格的URL處理,可以方便地獲取URL中的動態(tài)參數(shù)。
@RequestMapping("/hello4/{bid}")public String hello4(@PathVariable("bid") Integer bid){
// System.out.println("hello springMvc..");log.info("@PathVariable:bname:{},bid{}",bid);return "index";};
2.5. @RequestBody
使用@RequestBody注解可以將請求體的數(shù)據(jù)轉(zhuǎn)換為對應(yīng)的Java對象,并作為方法的參數(shù)。通過該注解,我們可以直接獲取請求體中的數(shù)據(jù),并進(jìn)行后續(xù)的業(yè)務(wù)處理。
@RequestMapping("/hello6")public String hello6( @RequestBody Map map){
// System.out.println("hello springMvc..");log.info("@RequestBody:map:{}",map);return "index";};
2.6. @RequestHeader
使用@RequestHeader注解可以獲取請求頭的值,可以指定頭部名稱和默認(rèn)值。通過該注解,我們可以方便地獲取請求頭中的信息,并根據(jù)需要進(jìn)行相應(yīng)的處理。
@RequestMapping("/hello7")public String hello7( @RequestHeader("jwt") String jwt){
// System.out.println("hello springMvc..");log.info("@RequestHeader:jwt:{}",jwt);return "index";};
三、返回值
在Spring MVC中,控制器方法可以返回不同類型的值作為響應(yīng)結(jié)果,根據(jù)業(yè)務(wù)需求選擇合適的返回類型。
3.1. void
如果控制器方法返回值為void,則表示該方法沒有返回值。這種情況下,通常是直接向客戶端寫入數(shù)據(jù)或者通過其他方式進(jìn)行響應(yīng)處理。
public void hello1(HttpServletResponse response) throws Exception {Map<String,Object>map=new HashMap<>();map.put("code",200);map.put("msg","成功添加");ResponseUtil.writeJson(response,map);};
3.2. String
控制器方法可以返回一個字符串作為響應(yīng)結(jié)果,這個字符串可以表示視圖的名稱或者響應(yīng)的內(nèi)容。當(dāng)返回視圖名稱時,Spring MVC會根據(jù)視圖解析器的配置找到對應(yīng)的視圖并渲染返回給客戶端。
@ResponseBody@RequestMapping("/hello2")public Map hello2(HttpServletResponse response) throws Exception {Map<String,Object>map=new HashMap<>();map.put("code",200);map.put("msg","成功添加");
return map;};
3.3. String+Model
控制器方法可以返回一個字符串和一個Model對象。這種情況下,字符串表示視圖的名稱,而Model對象用于在視圖中傳遞數(shù)據(jù)。通過Model對象,我們可以將數(shù)據(jù)傳遞到視圖中進(jìn)行展示或者其他業(yè)務(wù)處理。
@RequestMapping("/hello4")public String hello4(Model model, HttpServletRequest request) throws Exception {
model.addAttribute("currentName","鴨");request.setAttribute("location","雞");return "index";};
3.4. ModelAndView
控制器方法可以返回一個ModelAndView對象,它包含了視圖名稱和數(shù)據(jù)模型。ModelAndView是一種更加靈活的方式來處理視圖和數(shù)據(jù)的傳遞,可以同時指定視圖名稱和數(shù)據(jù)模型,并在需要的時候進(jìn)行相應(yīng)的操作。
@RequestMapping("/hello5")public ModelAndView hello5(Model model, HttpServletRequest request) throws Exception {ModelAndView mv=new ModelAndView();mv.addObject("sign","h");
mv.setViewName("index");return mv;};
四、頁面跳轉(zhuǎn)
在Spring MVC中,頁面跳轉(zhuǎn)可以通過轉(zhuǎn)發(fā)(forward)或重定向(redirect)來實現(xiàn)。
@RequestMapping("/hello6")public String hello6() throws Exception {System.out.println("hello6");return "forward:hello2";};
4.1. 轉(zhuǎn)發(fā)(forward)
使用請求轉(zhuǎn)發(fā)將請求發(fā)送到另一個URL路徑上進(jìn)行處理,客戶端的URL地址不會變化。這種方式適用于不同請求之間的跳轉(zhuǎn)和處理,可以共享請求的上下文數(shù)據(jù)。
@RequestMapping("/hello7")public String hello7() throws Exception {System.out.println("hello6");return "forward:/param//hello1";};
4.2. 重定向(redirect)
使用重定向?qū)⒄埱蟀l(fā)送到另一個URL路徑上進(jìn)行處理,客戶端的URL地址會改變。這種方式適用于不同請求之間的跳轉(zhuǎn)和處理,可以避免表單重復(fù)提交等問題。
@RequestMapping("/hello9")public String hello9() throws Exception {System.out.println("hello6");return "redirect:/param//hello1";};
總結(jié):
本文介紹了Spring MVC框架的基礎(chǔ)知識和常用注解,以及參數(shù)傳遞、返回值處理和頁面跳轉(zhuǎn)等相關(guān)內(nèi)容。掌握了這些知識,我們可以更加靈活地開發(fā)Web應(yīng)用程序,實現(xiàn)不同功能和業(yè)務(wù)需求。在后續(xù)的文章中,我們將深入討論Spring MVC的更多特性和用法,幫助讀者更好地理解和應(yīng)用該框架。