中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringMVC @RequestMapping注解怎么使用

發布時間:2023-05-05 15:31:39 來源:億速云 閱讀:297 作者:iii 欄目:開發技術

這篇文章主要介紹“SpringMVC @RequestMapping注解怎么使用”,在日常操作中,相信很多人在SpringMVC @RequestMapping注解怎么使用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”SpringMVC @RequestMapping注解怎么使用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    1、@RequestMapping注解的作用

    @RequestMapping注解的作用,就是將請求和處理請求的控制器方法關聯起來,建立映射關系。

    SpringMVC接收到一個請求,就會在映射關系中找到對應的控制器方法來處理這個請求。

    @RequestMapping有很多屬性,設置得越多,匹配的請求越精確。

    控制器中有多個方法對應同一個請求,怎么處理?

    編譯前正常,運行時報錯。說對于這個請求,已經存在對應的控制器方法了

     多個控制器,對于同一個請求配置了不同的控制器方法,怎么處理?

    編譯前正常,運行時報錯。說對于這個請求,已經存在對應的控制器方法了

    也就是說,請求和它的處理器方法必須是一一對應的關系

    2、@RequestMapping注解的位置

    查看@RequestMapping注解的源碼

    @Target({ElementType.TYPE, ElementType.METHOD})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Mapping
    public @interface RequestMapping {
        ...
    }

    從@Target可以看出

    • ElementType.TYPE:可以標記類

    • ElementType.METHOD:可以標記方法

    有兩種情況,標記在類上和標記在方法上

    @RequestMapping標識一個類:設置映射請求的請求路徑的初始信息

    @RequestMapping標識一個方法:設置映射請求請求路徑的具體信息

    @Controller
    @RequestMapping("/test")
    public class RequestMappingController {
        
        //此時請求映射所映射的請求的請求路徑為:/test/testRequestMapping
        @RequestMapping("/testRequestMapping")
        public String testRequestMapping(){
            return "success";
        }
    }

    使用場景

    常用于區分不同模塊的相同功能

    比如用戶模塊和訂單模塊都有展示數據功能,請求路徑都是/list。

    如果單純在兩個控制器中配置兩個針對/list的方法,則一個請求對應了兩個控制方法,運行時會報錯。

    而為了功能命名的統一,也不希望設置不同的名稱,比如/user_list 與 /order_list ,這樣雖然可以解決問題,但不合理。

    可以使用在類上配置@RequestMapping的方式,來區分用戶和訂單的 /list。

    比如

    @Controller
    @RequestMapping("/user")
    public class UserController {
        //此時請求映射所映射的請求的請求路徑為:/user/list
        @RequestMapping("/list")
        public String getUserList(){
            return "userList";
        }
    }
     
    @Controller
    @RequestMapping("/order")
    public class OrderController {
        //此時請求映射所映射的請求的請求路徑為:/order/list
        @RequestMapping("/list")
        public String getOrderList(){
            return "orderList";
        }
    }

    在訪問時,可以指定"/user/list" 和"/order/list"

    3、value屬性

    (1)基礎用法

    閱讀源碼

    public @interface RequestMapping {
        ...
            
        @AliasFor("path")
        String[] value() default {};
        
        ...
    }

    @RequestMapping中value屬性的作用

    value屬性必須配置!

    @RequestMapping注解的value屬性通過請求的請求地址匹配請求映射

    它是一個字符串類型的數組,表示該請求映射能夠匹配多個請求地址所對應的請求

    @RequestMapping(value={"/text1", "/text2"})
    public String toTarget(){
        System.out.println("請求收到");
        //返回視圖名稱
        return "text";
    }

    通過/text1和/text2,都能匹配到這個控制器方法,跳轉到text對應的視圖頁面

    注意

    有些特殊字符不能被匹配,例如 ? 或 / 或 空格

    (2)路徑中的占位符(重點)

    SpringMVC支持路徑中的占位符,在restful風格中會用到

    什么是restful風格

    通過拼接請求路徑的方式,傳遞請求參數

    原始方式:/deleteUser?id=1

    rest方式:/deleteUser/1

    服務器如何知道哪個/是目錄,哪個/是參數?

    參數部分,用{}占位符來填充。

    例如 /test/{} 就可以匹配/test/1 ,而/test/test/1這樣的更深目錄,就不會被錯誤匹配到

    但要注意,此時 /test 請求不能被 /test/{}匹配到。 /test/ 也不行。

    如何使用restful風格傳參

    當請求路徑中,將某些數據通過路徑的方式傳輸到服務器中后;

    就可以在相應的@RequestMapping注解的value屬性中,通過占位符{自定義名稱}表示傳輸的數據;

    在控制器方法的參數部分添加@PathVariable注解,將占位符所表示的數據賦值給控制器方法的形參;

    這樣就實現了從前端頁面傳參給后端控制器方法。

    總結:

    占位符{}告訴控制方法,此處是一個rest風格的參數;

    @PathVariable用于將這個參數與控制器方法的形參進行綁定,使之可以在方法中使用。

    示例

    單個參數

    模擬傳參

    <a th:href="@{/testPath/3}" rel="external nofollow" >rest風格</a>

    控制器方法

    @RequestMapping("/testPath/{id}")
    public String testPath(@PathVariable String id){
        System.out.println("id = " + id);
        return "target";
    }

    4、method屬性

    閱讀源碼

    public @interface RequestMapping {
    	...
     
        RequestMethod[] method() default {};
        
    	...
    }

    可以看出,method是一個RequestMethod類型的數組(RequestMethod就是請求方法)

    RequestMethod是一個枚舉類,包括:GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE

    @RequestMapping中method屬性的作用

    @RequestMapping注解的method屬性通過請求的請求方式(get或post)匹配請求映射。

    它是一個RequestMethod類型的數組,表示該請求映射能夠匹配多種請求方式的請求

    如果不設置method,默認是任何請求方式都能匹配(因為此時不以請求方式為條件)

    使用場景

    后續CRUD時,可以根據請求方式的不同,在同一個請求路徑下,匹配不同的控制方法,執行不同的SQL語句。

    示例

    由于value屬性必須設置,所以設置method屬性后,意思是既要滿足請求地址,又要滿足請求方法

    @RequestMapping(value="/target", method = {RequestMethod.GET, RequestMethod.POST})
    public String toTarget(){
    System.out.println("請求收到");
    //返回視圖名稱
    return "target";
    }

    注意

    如果當前請求的請求地址滿足請求映射的value屬性,但是請求方式不滿足method屬性,則瀏覽器報錯405:Request Method 'POST' not supported,請求方式不被支持。

    派生注解

    1、對于處理指定請求方式的控制器方法,SpringMVC中提供了@RequestMapping的派生注解:

    處理get請求的映射 --> @GetMapping
    處理post請求的映射 --> @PostMapping
    處理put請求的映射 --> @PutMapping
    處理delete請求的映射 --> @DeleteMapping
    派生注解的作用

    使用這些派生注解,就不用去指定請求方法了。

    例如@GetMapping("/test")相當于@RequestMapping(value="/test", method=RequestMethod.GET)

    示例

    @GetMapping("/get")
    public String getMapping(){
        return "get";
    }

    意思是,匹配 請求名稱為get,請求方法為get的請求。

    2、常用的請求方式有get、post、put、delete

    • get:查詢

    • post:修改

    • put:增加

    • delete:刪除

    但目前瀏覽器只支持get和post,如何發送其他類型的請求?

    若在form表單提交時,為method設置了其他請求方式的字符串(put或delete),則會按照默認的請求方式get處理。

    若要發送put和delete請求,需要通過Spring提供的過濾器HiddenHttpMethodFilter。是restful的內容

    5、params屬性(了解)

    閱讀源碼

    String[] params() default {};

    params是一個字符串類型的數組

    params屬性的作用

    @RequestMapping注解的params屬性通過請求的請求參數 匹配請求映射

    它是一個字符串類型的數組,可以通過四種表達式設置請求參數和請求映射的匹配關系:

    • "param":要求請求映射所匹配的請求必須攜帶param請求參數

    • "!param":要求請求映射所匹配的請求必須不能攜帶param請求參數

    • "param=value":要求請求映射所匹配的請求必須攜帶param請求參數且param=value

    • "param!=value":要求請求映射所匹配的請求必須攜帶param請求參數但是param!=value

    如果設置了多個參數匹配,則必須同時滿足,請求才能映射到。

    示例

    @RequestMapping(
        value = "/test"
        ,params = {"username","password!=123456"}
    )
    public String testRequestMapping(){
        return "success";
    }

    意思是匹配 請求名稱為test,請求參數包括username,且請求參數中password不等于123456的請求

    注意

    若當前請求滿足@RequestMapping注解的value和method屬性,但是不滿足params屬性,此時頁面會報錯400:Parameter conditions "username, password!=123456" not met for actual request parameters: username={admin}, password={123456}

    6、headers屬性(了解)

    閱讀源碼

    String[] headers() default {};

    headers屬性的作用

    @RequestMapping注解的headers屬性通過請求的請求頭信息匹配請求映射

    性是一個字符串類型的數組,可以通過四種表達式設置請求頭信息和請求映射的匹配關系

    • "header":要求請求映射所匹配的請求必須攜帶header請求頭信息

    • "!header":要求請求映射所匹配的請求必須不能攜帶header請求頭信息

    • "header=value":要求請求映射所匹配的請求必須攜帶header請求頭信息且header=value

    • "header!=value":要求請求映射所匹配的請求必須攜帶header請求頭信息且header!=value

    注意

    若當前請求滿足@RequestMapping注解的value和method屬性,但是不滿足headers屬性,此時頁面 顯示404錯誤,即資源未找到

    到此,關于“SpringMVC @RequestMapping注解怎么使用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    额济纳旗| 泸定县| 平陆县| 保德县| 怀化市| 绿春县| 京山县| 讷河市| 板桥市| 武汉市| 三原县| 榆树市| 依安县| 石泉县| 杂多县| 扶余县| 湘西| 资溪县| 视频| 浦东新区| 行唐县| 旬阳县| 阿合奇县| 农安县| 手游| 托克逊县| 顺昌县| 鄂尔多斯市| 四平市| 吴堡县| 巴林右旗| 临清市| 安溪县| 浑源县| 金山区| 福鼎市| 峨边| 威远县| 潞城市| 始兴县| 南涧|