最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC獲取請(qǐng)求參數(shù)的方法詳解

 更新時(shí)間:2023年07月21日 10:38:09   作者:從未止步..  
這篇文章主要為大家詳細(xì)介紹了SpringMVC中獲取請(qǐng)求參數(shù)的方法,例如通過(guò)ServletAPI獲取和通過(guò)控制器方法的形參獲取請(qǐng)求參數(shù)等,需要的可以參考下

本篇文章的項(xiàng)目配置是在這篇文章的基礎(chǔ)上實(shí)現(xiàn)的

通過(guò)ServletAPI獲取

將HttpServletRequest作為控制器方法的形參,此時(shí)HttpServletRequest類型的參數(shù)表示封裝了當(dāng)前請(qǐng)求的請(qǐng)求報(bào)文的對(duì)象

舉例如下:

第一步:在html文件中創(chuàng)建表單,如下所示:

index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首頁(yè)</title>
</head>
<body>
<h1>歡迎進(jìn)入首頁(yè)!</h1>
<form th:action="@{/param/ServletAPI}" method="post">
    用戶名:<input type="text" name="username"><br>
    密碼:<input type="password" name="password"><br>
    登錄:<input type="submit" value="登錄">
</form>
</body>
</html>

第二步:創(chuàng)建控制器方法,如下所示:

瀏覽器發(fā)送的請(qǐng)求被DispatcherServlet處理后,DispatcherServlet會(huì)將得到的請(qǐng)求信息和當(dāng)前控制器中的@RequestMapping的信息進(jìn)行匹配,如果匹配成功,則調(diào)用當(dāng)前的方法處理當(dāng)前的請(qǐng)求

package Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.http.HttpServletRequest;
@Controller
public class ServletAPIController {
    @RequestMapping( value = "/param/ServletAPI",method = RequestMethod.POST)
    //HttpServletRequest是Servlet API提供的一個(gè)接口,用于封裝HTTP請(qǐng)求的信息,而request即為當(dāng)前要處理的請(qǐng)求對(duì)象
    public String getParamTesting(HttpServletRequest request){
        String username=request.getParameter("用戶名");
        String password=request.getParameter("密碼");
        System.out.println("username:"+username+",password:"+password);
        return "success" ;
    }
}

重新部署項(xiàng)目,測(cè)試結(jié)果如下:

表單填寫完成后,點(diǎn)擊登錄

成功跳轉(zhuǎn)到success頁(yè)面

返回控制臺(tái),表單信息也被成功獲取

通過(guò)控制器方法的形參獲取請(qǐng)求參數(shù)

在控制器方法的形參位置,設(shè)置和請(qǐng)求參數(shù)同名的形參,當(dāng)瀏覽器發(fā)送請(qǐng)求,匹配到請(qǐng)求映射時(shí),在DispatcherServlet中就會(huì)將請(qǐng)求參數(shù)賦值給相應(yīng)的形參

舉例如下:

第一步:創(chuàng)建新的控制器和控制器方法,如下所示:

package Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class paramTesting {
    @RequestMapping("/param")
    public String getParamTesting(String username,String password){//注意這里的形參名必須與表單中的name相一致
        System.out.println("username:"+username+",password:"+password);
        return "success";
    }
}

第二步:將變量的值動(dòng)態(tài)的渲染到form表單中

index.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首頁(yè)</title>
</head>
<body>
<h1>歡迎進(jìn)入首頁(yè)!</h1>
<form th:action="@{/param}" method="post">
    用戶名:<input type="text" name="username"><br>
    密碼:<input type="password" name="password"><br>
    登錄:<input type="submit" value="登錄">
</form>
</body>
</html>

重新部署項(xiàng)目,將瀏覽器中的表單填寫

跳轉(zhuǎn)到如下所示成功的登錄頁(yè)面:

打開控制臺(tái),獲取到的表單中的信息如下所示:

我們會(huì)發(fā)現(xiàn)username,我們?cè)诒韱翁顚憰r(shí)的值為小明,而出現(xiàn)在控制臺(tái)卻是亂碼的,解決方法如下所示:

package Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.io.UnsupportedEncodingException;
@Controller
public class paramTesting {
    @RequestMapping("/param")
    public String getParamTesting(String username,String password) throws UnsupportedEncodingException {
        //在controller層添加這句話,把jsp前端傳過(guò)來(lái)的字符串改變編碼
        username= new String(username.getBytes("ISO8859-1"),"UTF-8");
        password= new String(password.getBytes("ISO8859-1"),"UTF-8");
        System.out.println("username:"+username+",password:"+password);
        return "success";
    }
}

此時(shí)重新部署項(xiàng)目,測(cè)試結(jié)果如下所示:

亂碼問(wèn)題被解決

上述我們是通過(guò)設(shè)置和請(qǐng)求參數(shù)同名的形參,但是在實(shí)際開發(fā)中往往都是前后端分離,可能會(huì)出現(xiàn)前端命名不規(guī)范,或者后端變量名沖突,此時(shí)后端獲取到的有可能為null,對(duì)此我們可手動(dòng)創(chuàng)建請(qǐng)求參數(shù)和形參的關(guān)系

@RequestParam注解的使用

@RequestParam注解源碼,如下所示:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.springframework.web.bind.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
    @AliasFor("name")
    String value() default "";
    @AliasFor("value")
    String name() default "";
    boolean required() default true;
    String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}

@RequestParam注解是Spring MVC框架中的一個(gè)注解,用于綁定請(qǐng)求參數(shù)到方法的參數(shù)上。它的作用是將HTTP請(qǐng)求中的參數(shù)值映射到方法的參數(shù)上,以便在方法中使用這些參數(shù)值。

具體來(lái)說(shuō),@RequestParam注解可以用于以下幾個(gè)方面:

1:綁定請(qǐng)求參數(shù)的名稱:通過(guò)@RequestParam注解,可以指定請(qǐng)求參數(shù)的名稱,將請(qǐng)求中對(duì)應(yīng)名稱的參數(shù)值綁定到方法的參數(shù)上

2:設(shè)置參數(shù)的默認(rèn)值:通過(guò)@RequestParam注解的defaultValue屬性,可以設(shè)置參數(shù)的默認(rèn)值。如果請(qǐng)求中沒有傳遞對(duì)應(yīng)名稱的參數(shù),那么方法的參數(shù)將使用默認(rèn)值。

3:設(shè)置參數(shù)的必需性:通過(guò)@RequestParam注解的required屬性,可以指定參數(shù)是否為必需的。如果將required屬性設(shè)置為true(默認(rèn)值為true),而請(qǐng)求中沒有傳遞對(duì)應(yīng)名稱的參數(shù),那么將拋出MissingServletRequestParameterException異常。例如:

但由于我們是表單提交的方式,因此表單中的每個(gè)參數(shù)名都會(huì)被傳遞,所以為了測(cè)試該屬性的效果,我們可以手動(dòng)在地址欄將username刪除,只保留password,如下所示:

但是當(dāng)我們將required的值設(shè)置為false時(shí),即使我們手動(dòng)的在地址欄將請(qǐng)求參數(shù)名username刪除,只保留password,也不會(huì)報(bào)錯(cuò),如下所示:

@RequestHeader注解的使用

將請(qǐng)求頭信息和控制器方法進(jìn)行綁定

@RequestHeader注解源碼如下所示:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.springframework.web.bind.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestHeader {
    @AliasFor("name")
    String value() default "";
    @AliasFor("value")
    String name() default "";
    boolean required() default true;
    String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}

舉例如下:

假設(shè)我們現(xiàn)在向獲取請(qǐng)求頭信息中的referer,如下所示:

獲取方法如下所示:

package Controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.io.UnsupportedEncodingException;
@Controller
public class paramTesting {
    @RequestMapping(value = "/param")
    public String getParamTesting(@RequestParam(required = false,defaultValue = "hello") String username, String password, @RequestHeader("referer") String referer) throws UnsupportedEncodingException {//在控制器方法的形參處創(chuàng)建新的形參名referer,并且給該形參名添加@RequestHeader注解,注解值為請(qǐng)求頭信息的參數(shù)名
        username= new String(username.getBytes("ISO8859-1"),"GBK");
        password= new String(password.getBytes("ISO8859-1"),"GBK");
        System.out.println("referer:"+referer);
        System.out.println("username:"+username+",password:"+password);
        return "success";
    }
}

測(cè)試后,控制臺(tái)輸出如下所示:

@RequestHeader注解中的defaultvalue屬性,當(dāng)該請(qǐng)求的請(qǐng)求頭信息中包含@RequestHeader注解中的value時(shí),那么如上所示,它會(huì)直接獲取該值,否則,將輸出defaultvalue中的值,舉例如下所示:

我們將defaultvalue的值設(shè)置為"No referer",因此當(dāng)該請(qǐng)求沒有來(lái)源地址時(shí),會(huì)輸出該值

public String getParamTesting(@RequestParam(required = false,defaultValue = "hello") String username, String password, @RequestHeader(value = "referer",defaultValue = "No referer") String referer)

測(cè)試方法為:將http://localhost:8080/ServletAPI/param?username=zhangsan&password=123復(fù)制在新的瀏覽器地址欄中打開,控制臺(tái)輸出如下所示:

@CookieValue注解的使用

將cookie數(shù)據(jù)和控制器方法進(jìn)行綁定

@CookieValue注解源碼如下所示:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package org.springframework.web.bind.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;
@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CookieValue {
    @AliasFor("name")
    String value() default "";
    @AliasFor("value")
    String name() default "";
    boolean required() default true;
    String defaultValue() default "\n\t\t\n\t\t\n\ue000\ue001\ue002\n\t\t\t\t\n";
}

通過(guò)之前的學(xué)習(xí),我們都知道cookie是鍵值對(duì),因此,當(dāng)我們想要獲取cookie就比較麻煩,首先通過(guò)getcookies()方法獲取一個(gè)類型為cookie的數(shù)組,再通過(guò)getName和getValue方法進(jìn)行獲取其鍵名和值,如果我們想獲取一個(gè)指定的cookie,那么還需要判斷它是否屬于某個(gè)類,屬于我們才能獲取其值,但在SpringMVC中,我們不需要如此麻煩,我們可以直接通過(guò)@CookieValue注解,如下所示:

假設(shè)我們想獲取該cookie,方法如下:

測(cè)試結(jié)果如下所示,控制臺(tái)輸出:

通過(guò)pojo獲取請(qǐng)求參數(shù)

假設(shè)我們通過(guò)瀏覽器向服務(wù)器傳輸?shù)臄?shù)據(jù)很復(fù)雜,包括姓名,年齡,性別,愛好,郵箱,家庭住址等等,如果我們還是按照上述的方法在控制器方法的參數(shù)部分創(chuàng)建形參來(lái)接受,這樣就會(huì)非常麻煩,對(duì)此SpringMVC為我們提供了一種簡(jiǎn)單的方法:只需要在控制器方法的形參位置設(shè)置實(shí)體類形參,但是需要保證實(shí)體類中的屬性和請(qǐng)求參數(shù)中的名稱一致,那么我們才可以直接將請(qǐng)求參數(shù)中的值封裝到實(shí)體類類型的形參中。

舉例如下所示:

第一步首先創(chuàng)建實(shí)體類:

package Controller.pojo;
public class User {
    private Integer id;
    private String username;
    private String password;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public User(Integer id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }
    public User() {
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

第二步:創(chuàng)建控制器方法

package Controller.pojo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class pojoController {
    @RequestMapping("/param/pojo")
    public String pojoTesting(User user){//在控制器方法的形參位置設(shè)置實(shí)體類形參
    	System.out.println("用戶信息為如下所示:");
        System.out.println(user);
        return "success";
    }
}

第三步修改index.html文件

如下所示:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>首頁(yè)</title>
</head>
<body>
<h1>歡迎進(jìn)入首頁(yè)!</h1>
<form th:action="@{/param/pojo}">
    id:<input type="text" name="id"><br>
    用戶名:<input type="text" name="username"><br>
    密碼:<input type="password" name="password"><br>
    登錄:<input type="submit" value="登錄">
</form>
</body>
</html>

在瀏覽器中填寫表單:

頁(yè)面跳轉(zhuǎn)成功后,控制臺(tái)輸出如下所示:

以上就是SpringMVC獲取請(qǐng)求參數(shù)的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringMVC獲取請(qǐng)求參數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JsonObject的屬性與值的判空(Null值)處理方式

    JsonObject的屬性與值的判空(Null值)處理方式

    這篇文章主要介紹了JsonObject的屬性與值的判空(Null值)處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Spring Boot文件上傳最新解決方案

    Spring Boot文件上傳最新解決方案

    本文給大家分享Spring Boot文件上傳功能的示例代碼,包括單文件上傳示例和多文件上傳,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-07-07
  • restTemplate未設(shè)置連接數(shù)導(dǎo)致服務(wù)雪崩問(wèn)題以及解決

    restTemplate未設(shè)置連接數(shù)導(dǎo)致服務(wù)雪崩問(wèn)題以及解決

    面對(duì)線上問(wèn)題,仔細(xì)分析原因,及時(shí)調(diào)整配置,能有效解決問(wèn)題,本文詳細(xì)描述了線上遇到流量突增引發(fā)的問(wèn)題,通過(guò)查看代碼和連接池信息,分析出問(wèn)題的原因是連接池滿了,連接池大小配置不足以應(yīng)對(duì)大并發(fā)流量,通過(guò)調(diào)整連接池大小配置
    2024-10-10
  • java中-jar 與nohup的對(duì)比

    java中-jar 與nohup的對(duì)比

    這篇文章主要介紹了java中 -jar 與nohup的對(duì)比的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Springboot集成JAXB返回xml格式

    Springboot集成JAXB返回xml格式

    這篇文章主要為大家詳細(xì)介紹了Springboot如何集成JAXB返回xml格式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-12-12
  • Java實(shí)現(xiàn)經(jīng)典游戲之大魚吃小魚

    Java實(shí)現(xiàn)經(jīng)典游戲之大魚吃小魚

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)經(jīng)典游戲之大魚吃小魚,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java游戲開發(fā)有一定幫助,需要的可以參考一下
    2022-08-08
  • SpringBoot攔截器實(shí)現(xiàn)對(duì)404和500等錯(cuò)誤的攔截

    SpringBoot攔截器實(shí)現(xiàn)對(duì)404和500等錯(cuò)誤的攔截

    本篇文章主要介紹了SpringBoot攔截器實(shí)現(xiàn)對(duì)404和500等錯(cuò)誤的攔截,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • 解決springboot錯(cuò)誤:找不到或無(wú)法加載主類(配置編碼或者M(jìn)aven)

    解決springboot錯(cuò)誤:找不到或無(wú)法加載主類(配置編碼或者M(jìn)aven)

    這篇文章主要介紹了解決springboot錯(cuò)誤:找不到或無(wú)法加載主類(配置編碼或者M(jìn)aven)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 一文帶你學(xué)會(huì)Java網(wǎng)絡(luò)編程

    一文帶你學(xué)會(huì)Java網(wǎng)絡(luò)編程

    網(wǎng)絡(luò)編程是指編寫運(yùn)行在多個(gè)設(shè)備(計(jì)算機(jī))的程序,這些設(shè)備都通過(guò)網(wǎng)絡(luò)連接起來(lái)。這篇文章將帶大家深入了解一下Java的網(wǎng)絡(luò)編程,需要的可以了解一下
    2022-08-08
  • spring boot注解方式使用redis緩存操作示例

    spring boot注解方式使用redis緩存操作示例

    這篇文章主要介紹了spring boot注解方式使用redis緩存操作,結(jié)合實(shí)例形式分析了spring boot注解方式使用redis緩存相關(guān)的依賴庫(kù)引入、注解使用及redis緩存相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11

最新評(píng)論

崇仁县| 砚山县| 沽源县| 夹江县| 黄梅县| 陆丰市| 靖边县| 扎赉特旗| 逊克县| 吕梁市| 吴旗县| 星座| 墨江| 沈丘县| 柘荣县| 齐齐哈尔市| 封丘县| 科尔| 南康市| 长武县| 广南县| 长兴县| 荣昌县| 定西市| 万源市| 隆尧县| 嘉祥县| 崇礼县| 温宿县| 永川市| 京山县| 方正县| 郯城县| 濉溪县| 湖南省| 梓潼县| 奎屯市| 扶余县| 澎湖县| 南溪县| 侯马市|