SpringMvc請求處理參數(shù)?和?響應數(shù)據(jù)處理的示例詳解
1、請求處理參數(shù)
1.1 請求參數(shù) @RequestParam
1.1.1 不使用 @RequestParam 注解
請求參數(shù)處理,不使用參數(shù)注解:
1.如果請求參數(shù)名和請求處理的形參名一致,springMvc 框架會自動將你的請求參數(shù)名對應的參數(shù)值,綁定到請求方法的形參中,方法內(nèi)就可以直接使用,不用手動獲??;
2.如果你的請求沒有攜帶參數(shù),不會報錯,只不過,請求處理方法的形參值都是null或其他值,如果請求處理方法形參是一個實體參數(shù),原理和單個類型參數(shù)一致(只要請求參數(shù)名和實體名一致也可以自動綁定);
測試不使用 @RequestParam 注解
@RequestMapping("/testSpringMvcNoRequestParam") public String testSpringMvcNoRequestParam( String userId,String userName){ System.out.println(String.format("------ 請求參數(shù):uid :%s ,uname:%s------",userId,userName)); return "success"; }
測試 請求不帶參數(shù)
測試 請求帶參數(shù)
1.1.3 使用 @RequestParam 注解
@RequestParam 只能寫在請求方法的形參上;
required = false 設置參數(shù)不是必傳;
defaultValue 默認值;
- 1.如果請求處理方法,形參前,只增加了此注解,沒有指定任何屬性:
- 作用:當前形參必傳,且參數(shù)名與形參名必須一致,如果不一致,參數(shù)綁定失敗,請求直接報400錯誤,提示你的參數(shù)沒有提供;
- 2.如果請求處理方法,形參前,只增加了此注解,并添加了value屬性值:
- 作用:請求的參數(shù)名必須和value屬性指定的名稱一致,此value屬性可以省略(只寫 請求參數(shù)別名時,如果有其他的屬性,value屬性必須指定);
- 3.如果要取消每個參數(shù)的必傳校驗,可以給此注解增加屬性 required=false(默認是true,必傳),參數(shù)可以不傳,不需要參數(shù)值的綁定;
- 4.如果某個參數(shù)必傳,但是為了防止請求沒有攜帶此參數(shù),可以通過指定屬性defaultValue增加默認值,如果調(diào)用當前請求方法處理,沒有提供參數(shù),自動使用默認值,綁定到方法的對應形參中;
測試
@RequestMapping("/testSpringMvcRequestParam") public String testSpringMvcRequestParam(@RequestParam("uid") String userId, @RequestParam(value = "uname",required = false,defaultValue = "KH96-mvc") String userName, @RequestParam String userPwd){ System.out.println(String.format("------ 請求參數(shù):uid :%s ,uname:%s,uPwd:%s------",userId,userName,userPwd)); return "success"; }
測試結(jié)果
1.2 請求頭參數(shù) @RequestHeader
請求頭參數(shù)@RequestHeader:
- 處理請求頭攜帶參數(shù);
- 作用:從請求頭中獲取參數(shù),根據(jù)別名或者參數(shù)形參名,將請求頭對應參數(shù)值,綁定到請求處理方法的形參中,直接使用,用法跟@RequestParam類似,也可以指定是否必傳,默認值;
測試
@RequestMapping("/testSpringMvcNoRequestHeader") public String testSpringMvcNoRequestHeader(@RequestHeader(value = "token",required = false,defaultValue = "KH96_mvc") String token){ System.out.println(String.format("------ 請求頭參數(shù):token :%s ------",token)); return "success"; }
測試結(jié)果
1.3 Cookie 參數(shù) @CookieValue
@CookieValue:
從cookie中獲取參數(shù),根據(jù)別名或者參數(shù)形參名,將請求頭對應參數(shù)值,綁定到請求處理方法的形參中,直接使用,用法跟@RequestParam,@RequestHeader類似,也可以指定是否必傳,默認值;
測試
@RequestMapping("/testSpringMvcCookieValue") public String testSpringMvcCookieValue(@CookieValue("JSESSIONID") String sessionId){ System.out.println(String.format("------ 請求cookie參數(shù):JSESSIONID :%s ------",sessionId)); return "success"; }
測試結(jié)果:
1.4 實體參數(shù)
請求參數(shù)處理 實體參數(shù):
自動將請求參數(shù)自動將實體的屬性名與形參綁定,原理和單個參數(shù)類型一致;
測試
@RequestMapping("/testSpringMvcBeanParam") public String testSpringMvcBeanParam(UserVO userVO){ System.out.println(String.format("------ 請求實體參數(shù):userVO :%s ------",userVO)); return "success"; }
測試結(jié)果
1.5 原生servlet的API接口作為請求參數(shù)
用法和javaWeb截斷學習的用法完全一致;
@RequestMapping("testSpringMvcServletAPI") public void testSpringMvcServletAIP(HttpServletRequest request, HttpServletResponse response,HttpSession session) throws IOException, ServletException { //獲取請求方式 System.out.println(String.format("------ 請求方式:%s ------",request.getMethod())); //獲取請求參數(shù) System.out.println(String.format("------ 請求參數(shù):%s ------",request.getParameter("userTel"))); //手動轉(zhuǎn)發(fā) // request.getRequestDispatcher("/WEB-INF/views/success.jsp").forward(request,response); //獲取session對象 //手動添加參數(shù) HttpSession sessionHad = request.getSession(); //sessionHad.setAttribute("userTel",request.getParameter("userTel")); //方式2;直接將HttpSession對象聲明在請求處理方法的形參中,可以自動獲取 session //重定向到 // response.sendRedirect("http://www.baidu.com"); }
2、響應數(shù)據(jù)處理
2.1 ModelAndView
ModelAndView 的數(shù)據(jù)模型放在request的作用域中,視圖模型,放在request.getRequestDispatcher(前綴+視圖名字+后綴);
結(jié)論:SpringMVC框架的前端核心控制器,會自動將返回的ModelAndView對象中的數(shù)據(jù)模型,添加到request作用域中使用內(nèi)部轉(zhuǎn)發(fā)方式,轉(zhuǎn)發(fā)到目標視圖;
測試
@RequestMapping("/testSpringMvcModelAndView") public ModelAndView testSpringMvcModelAndView(String userEmail){ //創(chuàng)建一個 ModelAndView 對象 ModelAndView mav = new ModelAndView(); //添加模型數(shù)據(jù) mav.addObject("uemail",userEmail); //可以添加多個模型數(shù)據(jù),內(nèi)部使用ModelMap集合存放的 mav.addObject("uage",18); //設置目標視圖 mav.setViewName("ok"); //返回 ModelAndView 對象 return mav; }
測試結(jié)果
2.2 Map
要求:使用map返回模型數(shù)據(jù),必須將map聲明在請求處理方法的形參中,定義在方法的內(nèi)部是無效的;
總結(jié):
- 1.springMVC底層在調(diào)用目標請求處理方法前,會自動創(chuàng)建一個Model接口的隱含對象作為模型數(shù)據(jù)的存儲對象,如果目標請求處理方法定義了一個map接口,自動將隱含對象使用引用傳遞方式傳遞到目標請求處理方法中,方法體內(nèi)就可以直接添加模型數(shù)據(jù);
- 2.SpringMvc底層,在調(diào)用完你的請求處理方法后,不管返回什么類型,都會被轉(zhuǎn)換為一個ModelAndView對象;
測試
@RequestMapping("/testSpringMvcMap") public String testSpringMvcMap(String userEmail, Map<String,Object> map){ //輸出map的目標類型 System.out.println(map.getClass().getName()); //org.springframework.validation.support.BindingAwareModelMap //添加模型數(shù)據(jù) map.put("uemail",userEmail); //返回目標視圖名稱 return "ok"; }
測試結(jié)果
2.3 Model
Model,可以添加模型數(shù)據(jù);
必須將 Model 聲明在請求處理方法的形參中,定義在方法的內(nèi)部是無效的,用法跟Map 一致;
測試
@RequestMapping("/testSpringMvcModel") public String testSpringMvcModel(String userEmail, Model model){ //添加模型數(shù)據(jù) model.addAttribute("uemail",userEmail); //返回目標視圖名稱 return "ok"; }
測試結(jié)果
2.4 forward: 轉(zhuǎn)發(fā) 和 redirect: 重定向
2.4.1forward 轉(zhuǎn)發(fā)
只需要在返回的視圖名稱前,增加一個前綴:forward 即可,直接轉(zhuǎn)發(fā)到目標資源;
當前請求處理方法中的模型對象可以帶走;
@RequestMapping("/testSpringMvcForward") public String testSpringMvcForward(Map<String,Object> map){ //轉(zhuǎn)發(fā)頁面跳轉(zhuǎn) //return "forward:/forward.jsp"; //轉(zhuǎn)發(fā)到其他請求中 //return "forward:/testSpringMvcModel?userEmail=123@qq.com"; //自定義轉(zhuǎn)發(fā),攜帶模型數(shù)據(jù) map.put("uaddr","nj_wd_kh96"); return "forward:/testSpringMvcModel?userEmail=123@qq.com"; }
2.4.2 redirect 重定向
只需要在返回的視圖名稱前,增加一個前綴:redirect 即可,不做視圖解析器,直接重定向
注意,重定向,當前請求處理方法中的模型對象不能帶走
@RequestMapping("/testSpringMvcRedirect") public String testSpringMvcRedirect(){ //重定向頁面跳轉(zhuǎn) //return "redirect:/redirect.jsp"; //重定向 可以重定向到 其他請求中 return "redirect:/testSpringMvcModel?userEmail=123@qq.com"; }
2.5 @ResponseBody
返回JSON數(shù)據(jù);
- 注意:返回不需要手動轉(zhuǎn)換為json字符串,直接返回對象;
- @ResponseBody 將返回請求處理方法返回的源對象數(shù)據(jù),直接轉(zhuǎn)換為json格式字符串,返回,不走視圖解析;
- 注意:必須增加Jackson依賴的jar包,否者報錯,且必須要增加注解掃描<mvc:annotation-driven></mvc:annotation-driven> 才可以;
- 位置:可以寫在請求處理方法上或者類上,寫在類上,就是對當前類中所有請求處理方法生效,寫在方法上,只有對當前方法生效;
2.5.1 jar包
<!-- JSON begin --> <!--jackson--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.8.4</version> </dependency> <!--jackson--> <!-- JSON end -->
2.5.2 配置
<beans xmlns= xmlns:mvc="http://www.springframework.org/schema/mvc" http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!-- 開啟MVC 的注解掃描 --> <mvc:annotation-driven></mvc:annotation-driven> </beans>
2.5.3 測試
@RequestMapping("/testSpringMvcJson") @ResponseBody public UserVO testSpringMvcJson(){ //模擬獲取去用戶詳情對象 UserVO userVO = new UserVO(); userVO.setUserId("KH96_01"); userVO.setUserName("GKC"); userVO.setUserPwd("123"); return userVO; }
測試結(jié)果
到此這篇關于SpringMvc請求處理參數(shù) 和 響應數(shù)據(jù)處理的文章就介紹到這了,更多相關SpringMvc請求處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot?Test的webEnvironment源碼解讀
這篇文章主要為大家介紹了SpringBoot?Test的webEnvironment源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09Mybatis Select Count(*)的返回值類型介紹
這篇文章主要介紹了Mybatis Select Count(*)的返回值類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12springboot網(wǎng)站應用使用第三方qq登錄的實現(xiàn)過程
這篇文章主要介紹了springboot網(wǎng)站應用使用第三方qq登錄,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09使用SpringBoot動態(tài)切換數(shù)據(jù)源的實現(xiàn)方式
在我們企業(yè)項目開發(fā)的過程中,有的時候,一個項目需要在運行時,根據(jù)某種條件選擇使用哪個數(shù)據(jù)源,那么此時該怎么進行動態(tài)切換呢,本文給大家例舉一種常見的實現(xiàn)方式,文中有詳細的實現(xiàn)步驟,需要的朋友可以參考下2023-12-12