欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringMvc請(qǐng)求處理參數(shù)?和?響應(yīng)數(shù)據(jù)處理的示例詳解

 更新時(shí)間:2022年09月04日 07:36:59   作者:化羽羽  
這篇文章主要介紹了SpringMvc請(qǐng)求處理參數(shù)和響應(yīng)數(shù)據(jù)處理,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1、請(qǐng)求處理參數(shù)

1.1 請(qǐng)求參數(shù) @RequestParam

1.1.1 不使用 @RequestParam 注解

請(qǐng)求參數(shù)處理,不使用參數(shù)注解:
1.如果請(qǐng)求參數(shù)名和請(qǐng)求處理的形參名一致,springMvc 框架會(huì)自動(dòng)將你的請(qǐng)求參數(shù)名對(duì)應(yīng)的參數(shù)值,綁定到請(qǐng)求方法的形參中,方法內(nèi)就可以直接使用,不用手動(dòng)獲??;

2.如果你的請(qǐng)求沒(méi)有攜帶參數(shù),不會(huì)報(bào)錯(cuò),只不過(guò),請(qǐng)求處理方法的形參值都是null或其他值,如果請(qǐng)求處理方法形參是一個(gè)實(shí)體參數(shù),原理和單個(gè)類型參數(shù)一致(只要請(qǐng)求參數(shù)名和實(shí)體名一致也可以自動(dòng)綁定);

測(cè)試不使用 @RequestParam 注解

@RequestMapping("/testSpringMvcNoRequestParam")
public String testSpringMvcNoRequestParam( String userId,String userName){

    System.out.println(String.format("------ 請(qǐng)求參數(shù):uid :%s ,uname:%s------",userId,userName));

    return "success";
}

測(cè)試 請(qǐng)求不帶參數(shù)

測(cè)試 請(qǐng)求帶參數(shù)

1.1.3 使用 @RequestParam 注解

@RequestParam 只能寫(xiě)在請(qǐng)求方法的形參上;
required = false 設(shè)置參數(shù)不是必傳;
defaultValue 默認(rèn)值;

  • 1.如果請(qǐng)求處理方法,形參前,只增加了此注解,沒(méi)有指定任何屬性:
    • 作用:當(dāng)前形參必傳,且參數(shù)名形參名必須一致,如果不一致,參數(shù)綁定失敗,請(qǐng)求直接報(bào)400錯(cuò)誤,提示你的參數(shù)沒(méi)有提供;
  • 2.如果請(qǐng)求處理方法,形參前,只增加了此注解,并添加了value屬性值
    • 作用:請(qǐng)求的參數(shù)名必須和value屬性指定的名稱一致,此value屬性可以省略(只寫(xiě) 請(qǐng)求參數(shù)別名時(shí),如果有其他的屬性,value屬性必須指定);
  • 3.如果要取消每個(gè)參數(shù)的必傳校驗(yàn),可以給此注解增加屬性 required=false(默認(rèn)是true,必傳),參數(shù)可以不傳,不需要參數(shù)值的綁定;
  • 4.如果某個(gè)參數(shù)必傳,但是為了防止請(qǐng)求沒(méi)有攜帶此參數(shù),可以通過(guò)指定屬性defaultValue增加默認(rèn)值,如果調(diào)用當(dāng)前請(qǐng)求方法處理,沒(méi)有提供參數(shù),自動(dòng)使用默認(rèn)值,綁定到方法的對(duì)應(yīng)形參中;

測(cè)試

@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("------ 請(qǐng)求參數(shù):uid :%s ,uname:%s,uPwd:%s------",userId,userName,userPwd));

    return "success";
}

測(cè)試結(jié)果

1.2 請(qǐng)求頭參數(shù) @RequestHeader

請(qǐng)求頭參數(shù)@RequestHeader:

  • 處理請(qǐng)求頭攜帶參數(shù);
  • 作用:從請(qǐng)求頭中獲取參數(shù),根據(jù)別名或者參數(shù)形參名,將請(qǐng)求頭對(duì)應(yīng)參數(shù)值,綁定到請(qǐng)求處理方法的形參中,直接使用,用法跟@RequestParam類似,也可以指定是否必傳,默認(rèn)值;

測(cè)試

@RequestMapping("/testSpringMvcNoRequestHeader")
public String testSpringMvcNoRequestHeader(@RequestHeader(value = "token",required = false,defaultValue = "KH96_mvc") String token){

    System.out.println(String.format("------ 請(qǐng)求頭參數(shù):token :%s ------",token));

    return "success";
}

測(cè)試結(jié)果

1.3 Cookie 參數(shù) @CookieValue

@CookieValue:

從cookie中獲取參數(shù),根據(jù)別名或者參數(shù)形參名,將請(qǐng)求頭對(duì)應(yīng)參數(shù)值,綁定到請(qǐng)求處理方法的形參中,直接使用,用法跟@RequestParam,@RequestHeader類似,也可以指定是否必傳,默認(rèn)值;

測(cè)試

@RequestMapping("/testSpringMvcCookieValue")
public String testSpringMvcCookieValue(@CookieValue("JSESSIONID") String sessionId){

    System.out.println(String.format("------ 請(qǐng)求cookie參數(shù):JSESSIONID :%s ------",sessionId));

    return "success";
}

測(cè)試結(jié)果:

1.4 實(shí)體參數(shù)

請(qǐng)求參數(shù)處理 實(shí)體參數(shù):
自動(dòng)將請(qǐng)求參數(shù)自動(dòng)將實(shí)體的屬性名與形參綁定,原理和單個(gè)參數(shù)類型一致;

測(cè)試

@RequestMapping("/testSpringMvcBeanParam")
public String testSpringMvcBeanParam(UserVO userVO){

    System.out.println(String.format("------ 請(qǐng)求實(shí)體參數(shù):userVO :%s ------",userVO));

    return "success";
}

測(cè)試結(jié)果

1.5 原生servlet的API接口作為請(qǐng)求參數(shù)

用法和javaWeb截?cái)鄬W(xué)習(xí)的用法完全一致;

@RequestMapping("testSpringMvcServletAPI")
public  void testSpringMvcServletAIP(HttpServletRequest request, HttpServletResponse response,HttpSession session) throws IOException, ServletException {
    //獲取請(qǐng)求方式
    System.out.println(String.format("------ 請(qǐng)求方式:%s ------",request.getMethod()));

    //獲取請(qǐng)求參數(shù)
    System.out.println(String.format("------ 請(qǐng)求參數(shù):%s ------",request.getParameter("userTel")));

    //手動(dòng)轉(zhuǎn)發(fā)
    // request.getRequestDispatcher("/WEB-INF/views/success.jsp").forward(request,response);

    //獲取session對(duì)象
    //手動(dòng)添加參數(shù)
    HttpSession sessionHad = request.getSession();

    //sessionHad.setAttribute("userTel",request.getParameter("userTel"));

    //方式2;直接將HttpSession對(duì)象聲明在請(qǐng)求處理方法的形參中,可以自動(dòng)獲取 session

    //重定向到
    //        response.sendRedirect("http://www.baidu.com");

}

2、響應(yīng)數(shù)據(jù)處理

2.1 ModelAndView

ModelAndView 的數(shù)據(jù)模型放在request的作用域中,視圖模型,放在request.getRequestDispatcher(前綴+視圖名字+后綴);

結(jié)論:SpringMVC框架的前端核心控制器,會(huì)自動(dòng)將返回的ModelAndView對(duì)象中的數(shù)據(jù)模型,添加到request作用域中使用內(nèi)部轉(zhuǎn)發(fā)方式,轉(zhuǎn)發(fā)到目標(biāo)視圖;

測(cè)試

@RequestMapping("/testSpringMvcModelAndView")
public ModelAndView testSpringMvcModelAndView(String userEmail){

    //創(chuàng)建一個(gè) ModelAndView 對(duì)象
    ModelAndView mav = new ModelAndView();

    //添加模型數(shù)據(jù)
    mav.addObject("uemail",userEmail);
    //可以添加多個(gè)模型數(shù)據(jù),內(nèi)部使用ModelMap集合存放的
    mav.addObject("uage",18);

    //設(shè)置目標(biāo)視圖
    mav.setViewName("ok");

    //返回  ModelAndView 對(duì)象
    return  mav;

}

測(cè)試結(jié)果

2.2 Map

要求:使用map返回模型數(shù)據(jù),必須將map聲明在請(qǐng)求處理方法的形參中,定義在方法的內(nèi)部是無(wú)效的;

總結(jié):

  • 1.springMVC底層在調(diào)用目標(biāo)請(qǐng)求處理方法前,會(huì)自動(dòng)創(chuàng)建一個(gè)Model接口的隱含對(duì)象作為模型數(shù)據(jù)存儲(chǔ)對(duì)象,如果目標(biāo)請(qǐng)求處理方法定義了一個(gè)map接口,自動(dòng)將隱含對(duì)象使用引用傳遞方式傳遞到目標(biāo)請(qǐng)求處理方法中,方法體內(nèi)就可以直接添加模型數(shù)據(jù);
  • 2.SpringMvc底層,在調(diào)用完你的請(qǐng)求處理方法后,不管返回什么類型,都會(huì)被轉(zhuǎn)換為一個(gè)ModelAndView對(duì)象;

測(cè)試

@RequestMapping("/testSpringMvcMap")
public  String testSpringMvcMap(String userEmail, Map<String,Object> map){

    //輸出map的目標(biāo)類型
    System.out.println(map.getClass().getName());
    //org.springframework.validation.support.BindingAwareModelMap

    //添加模型數(shù)據(jù)
    map.put("uemail",userEmail);

    //返回目標(biāo)視圖名稱
    return "ok";

}

測(cè)試結(jié)果

2.3 Model

Model,可以添加模型數(shù)據(jù);
必須將 Model 聲明在請(qǐng)求處理方法的形參中,定義在方法的內(nèi)部是無(wú)效的,用法跟Map 一致;

測(cè)試

@RequestMapping("/testSpringMvcModel")
public  String testSpringMvcModel(String userEmail, Model model){

    //添加模型數(shù)據(jù)
    model.addAttribute("uemail",userEmail);

    //返回目標(biāo)視圖名稱
    return "ok";

}

測(cè)試結(jié)果

2.4 forward: 轉(zhuǎn)發(fā) 和 redirect: 重定向

2.4.1forward 轉(zhuǎn)發(fā)

只需要在返回的視圖名稱前,增加一個(gè)前綴:forward 即可,直接轉(zhuǎn)發(fā)到目標(biāo)資源;
當(dāng)前請(qǐng)求處理方法中的模型對(duì)象可以帶走;

@RequestMapping("/testSpringMvcForward")
public String testSpringMvcForward(Map<String,Object> map){

    //轉(zhuǎn)發(fā)頁(yè)面跳轉(zhuǎn)
    //return "forward:/forward.jsp";

    //轉(zhuǎn)發(fā)到其他請(qǐng)求中
    //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 重定向

只需要在返回的視圖名稱前,增加一個(gè)前綴:redirect 即可,不做視圖解析器,直接重定向

注意,重定向,當(dāng)前請(qǐng)求處理方法中的模型對(duì)象不能帶走

@RequestMapping("/testSpringMvcRedirect")
public String testSpringMvcRedirect(){

    //重定向頁(yè)面跳轉(zhuǎn)
    //return "redirect:/redirect.jsp";

    //重定向 可以重定向到 其他請(qǐng)求中
    return "redirect:/testSpringMvcModel?userEmail=123@qq.com";

}

2.5 @ResponseBody

返回JSON數(shù)據(jù);

  • 注意:返回不需要手動(dòng)轉(zhuǎn)換為json字符串,直接返回對(duì)象;
  • @ResponseBody 將返回請(qǐng)求處理方法返回的源對(duì)象數(shù)據(jù),直接轉(zhuǎn)換為json格式字符串,返回,不走視圖解析;
  • 注意:必須增加Jackson依賴的jar包,否者報(bào)錯(cuò),且必須要增加注解掃描<mvc:annotation-driven></mvc:annotation-driven> 才可以;
  • 位置:可以寫(xiě)在請(qǐng)求處理方法上或者類上,寫(xiě)在類上,就是對(duì)當(dāng)前類中所有請(qǐng)求處理方法生效,寫(xiě)在方法上,只有對(duì)當(dāng)前方法生效;

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
">
    <!-- 開(kāi)啟MVC 的注解掃描 -->
    <mvc:annotation-driven></mvc:annotation-driven>

</beans>

2.5.3 測(cè)試

@RequestMapping("/testSpringMvcJson")
@ResponseBody
public UserVO testSpringMvcJson(){

    //模擬獲取去用戶詳情對(duì)象
    UserVO userVO = new UserVO();

    userVO.setUserId("KH96_01");
    userVO.setUserName("GKC");
    userVO.setUserPwd("123");

    return userVO;

}

測(cè)試結(jié)果

到此這篇關(guān)于SpringMvc請(qǐng)求處理參數(shù) 和 響應(yīng)數(shù)據(jù)處理的文章就介紹到這了,更多相關(guān)SpringMvc請(qǐng)求處理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談JAVA版本號(hào)的問(wèn)題 Java版本號(hào)與JDk版本

    淺談JAVA版本號(hào)的問(wèn)題 Java版本號(hào)與JDk版本

    這篇文章主要介紹了淺談JAVA版本號(hào)的問(wèn)題 Java版本號(hào)與JDk版本,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • 詳解java自定義類

    詳解java自定義類

    這篇文章主要介紹了java自定義類的概念以及用法,文中講解非常詳細(xì),實(shí)例代碼幫助大家更好的理解,感興趣的朋友可以參考下
    2020-06-06
  • Java equals()方法使用詳解及總結(jié)

    Java equals()方法使用詳解及總結(jié)

    這篇文章主要介紹了Java equals()方法使用詳解及總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • SpringBoot?Test的webEnvironment源碼解讀

    SpringBoot?Test的webEnvironment源碼解讀

    這篇文章主要為大家介紹了SpringBoot?Test的webEnvironment源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Mybatis Select Count(*)的返回值類型介紹

    Mybatis Select Count(*)的返回值類型介紹

    這篇文章主要介紹了Mybatis Select Count(*)的返回值類型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java設(shè)計(jì)模式之裝飾器模式

    Java設(shè)計(jì)模式之裝飾器模式

    這篇文章介紹了Java設(shè)計(jì)模式之裝飾器模式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • eclipse修改maven倉(cāng)庫(kù)位置的方法實(shí)現(xiàn)

    eclipse修改maven倉(cāng)庫(kù)位置的方法實(shí)現(xiàn)

    本文主要介紹了eclipse修改maven倉(cāng)庫(kù)位置的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • springboot網(wǎng)站應(yīng)用使用第三方qq登錄的實(shí)現(xiàn)過(guò)程

    springboot網(wǎng)站應(yīng)用使用第三方qq登錄的實(shí)現(xiàn)過(guò)程

    這篇文章主要介紹了springboot網(wǎng)站應(yīng)用使用第三方qq登錄,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Java高級(jí)特性之反射機(jī)制實(shí)例詳解

    Java高級(jí)特性之反射機(jī)制實(shí)例詳解

    這篇文章主要介紹了Java高級(jí)特性之反射機(jī)制,結(jié)合實(shí)例形式詳細(xì)分析了Java反射機(jī)制原理、功能、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-08-08
  • 使用SpringBoot動(dòng)態(tài)切換數(shù)據(jù)源的實(shí)現(xiàn)方式

    使用SpringBoot動(dòng)態(tài)切換數(shù)據(jù)源的實(shí)現(xiàn)方式

    在我們企業(yè)項(xiàng)目開(kāi)發(fā)的過(guò)程中,有的時(shí)候,一個(gè)項(xiàng)目需要在運(yùn)行時(shí),根據(jù)某種條件選擇使用哪個(gè)數(shù)據(jù)源,那么此時(shí)該怎么進(jìn)行動(dòng)態(tài)切換呢,本文給大家例舉一種常見(jiàn)的實(shí)現(xiàn)方式,文中有詳細(xì)的實(shí)現(xiàn)步驟,需要的朋友可以參考下
    2023-12-12

最新評(píng)論