day01-2-@RequestMapping

来源:https://www.cnblogs.com/liyuelian/archive/2023/02/05/17094179.html
-Advertisement-
Play Games

@RequestMapping 1.基本使用 @RequestMapping註解可以指定 控制器(處理器) 的某個方法的請求url 2.@RequestMapping其他使用方式 2.1修飾方法和類 @RequestMapping註解可以修飾方法,還可以修飾類。 當同時修飾類和方法時,請求的url就 ...


@RequestMapping

1.基本使用

@RequestMapping註解可以指定 控制器(處理器) 的某個方法的請求url

image-20230202212828452

2.@RequestMapping其他使用方式

2.1修飾方法和類

@RequestMapping註解可以修飾方法,還可以修飾類。

當同時修飾類和方法時,請求的url就是組合形式:/類請求值/方法請求值

例子

(1)UserHandler.java:

package com.li.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * @author 李
 * @version 1.0
 */
@RequestMapping(value = "/user")
@Controller  //UserHandler就是一個處理器/控制器,註入到spring容器
public class UserHandler {
    /**
     * 1.method = RequestMethod.POST 表示請求buy方法必須是post請求
     * 2.RequestMethod 四個常用的選項 :GET, POST, PUT, DELETE
     * 3.如果沒有配置 RequestMethod,SpringMVC控制器預設支持 get和 post兩種方式
     * 4.buy()方法對應的完整請求url = http://ip:port/web工程路徑/user/buy
     * @return
     */
    @RequestMapping(value = "/buy", method = RequestMethod.POST)
    public String buy() {
        System.out.println("購買商品");
        return "success";
    }
}

(2)request.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>購買商品</title>
</head>
<body>
<h1>購買商品</h1>
<%--
buy()方法對應的完整請求 url = http://ip:port/web工程路徑/user/buy
--%>
<form action="user/buy" method="post">
    購買人:<input type="text" name="username"/><br/>
    購買量:<input type="text" name="nums"/><br/>
    <input type="submit" value="提交"/>
</form>
</body>
</html>

(3)success.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>操作成功</title>
</head>
<body>
<h1>恭喜,操作成功!</h1>
</body>
</html>

在瀏覽器中訪問 http://localhost:8080/springmvc/request.jsp,點擊提交按鈕,結果如下:

image-20230203191741074 image-20230203191828499

2.2指定請求方式

  1. @RequestMapping 可以指定請求的方式(post/get/put/delete...),請求方式要和指定方式一致,否則報錯:

    image-20230203192822882
  2. SpringMVC 控制器預設支持get 和 post兩種請求方式,即如果沒有指定 method,可以接收 get 和 post請求

2.3指定params和headers,支持簡單表達式

  1. param1:表示請求必須包含名為 param1 的請求參數
  2. !param1:表示請求不能包含名為 param1 的請求參數
  3. param1 != value1:表示請求包含名為 param1 的請求參數,但其值不能為 value1
  4. {"param1 = value1", "param2"}:請求必須包含名為 param1 和 param2 的兩個請求參數,且 param1的值必須為 value1

應用實例

(1)修改UserHandler.java,增加方法

//...
@RequestMapping(value = "/user")
@Controller  
public class UserHandler {
    //...

    /**
     * 1.params = "bookId" 表示請求該方式時,必須給一個名為 bookId的參數
     * 2.search(String bookId){} 表示請求目標方法時,
     *  攜帶的 bookId參數的值會被填充到目標方法的同名形參中
     * @param bookId
     * @return
     */
    @RequestMapping(value = "/find", params = "bookId", method = RequestMethod.GET)
    public String search(String bookId) {
        System.out.println("查詢書籍 bookId=" + bookId);
        return "success";
    }
}

(2)request.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>購買商品</title>
</head>
<body>
<h1>演示params的使用</h1>
<a href="user/find?bookId=100">查詢書籍</a>
</body>
</html>

(3) success.jsp 不變。

(4)redeployTomcat,在瀏覽器地址欄訪問:http://localhost:8080/springmvc/request.jsp,點擊查詢書籍超鏈接,結果如下:

image-20230203203244672 image-20230203203931702

(5)修改UserHandler.java,指定參數的值=100。

image-20230203204158727

(6)修改request.jsp,修改發送的值為200.

(7)redeployTomcat,重新範文request.jsp,點擊超鏈接,這裡可以看到出現異常,因為發送的值和方法指定的值不一樣。

image-20230203204520955

2.4支持Ant 風格資源地址

  1. ?:匹配文件名中的一個字元
  2. *:匹配文件名中的任意字元,長度任意
  3. **:匹配多層路徑
  4. Ant 風格的 url 地址舉例:
    • /user/*/createUser:匹配 /user/aaa/createUser、/user/bbb/createUser 等 URL
    • /user/**/createUser:匹配 /user/createUser、/user/aaa/bbb/createUser 等 URL
    • /user/createUser??: 匹配 /user/createUserab、/user/createUsercd 等 URL

應用實例

(1)修改UserHandler.java,增加方法:

//...
@RequestMapping(value = "/user")
@Controller  
public class UserHandler {
    //...
    
    /**
     * 要求:可以匹配 /user/message/aa, /user/message/aa/bb/cc
     *  @RequestMapping(value = "/message/**")
     *  表示可以匹配多層的路徑
     * @return
     */
    @RequestMapping(value = "/message/**")
    public String im(){
        System.out.println("發送消息");
        return "success";
    }
}

(2)修改request.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>購買商品</title>
</head>
<body>
<h1>演示 Ant 風格的請求資源方式</h1>
<a href="user/message/aa">發送消息 1</a><br>
<a href="user/message/aa/bb/cc">發送消息 2</a><br>
</body>
</html>

(3) success.jsp 不變。

(4)redeployTomcat,在瀏覽器地址欄訪問:http://localhost:8080/springmvc/request.jsp,分別點擊兩個超鏈接,都能成功訪問方法,並跳轉到success.jsp

image-20230203211052829 image-20230203211132423 image-20230203211202176

2.5可配合@PathVariable映射URL綁定的占位符

  1. @RequestMapping 還可以配合 @PathVariable(路徑變數) 映射 URL 綁定的占位符
  2. 這樣就不需要在url地址欄上帶參數名了,更加簡潔明瞭

例子

request.jsp頁面如下,其中 kristina 和 300 皆為參數值

<h1>占位符的演示</h1>
<a href="user/reg/kristina/300">占位符的演示</a>

(1)修改UserHandler.java,增加方法,註意@PathVariable("username") 不能少

//...
@RequestMapping(value = "/user")
@Controller 
public class UserHandler {
    /**
     * 我們希望目標方法獲取到username和 userid
     * 前端頁面為:<a href="user/reg/kristina/300">占位符的演示</a>
     * 1. value = "/reg/{username}/{userid}"
     *    表示 kristina=>{username} ,300=>{userid}
     * 2.通過 @PathVariable 將變數賦給對應的形參
     */
    @RequestMapping(value = "/reg/{username}/{userid}")
    public String register(@PathVariable("username") String name,
                           @PathVariable("userid") int id) {
        System.out.println("接收到的參數--username=" + name + "--userid=" + id);
        return "success";
    }
}

(2)success.jsp不變

(3)redeployTomcat,訪問 http://localhost:8080/springmvc/request.jsp,點擊超鏈接,成功訪問到success.jsp,後臺輸出如下:

image-20230203213818006

2.6註意事項和使用細節

  1. 映射的URL不能重覆,否則報錯:

    註意:Spring MVC controller路徑是否能夠重覆?

    Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'userHandler' method 
    com.li.web.UserHandler#buy()
    to {POST [/user/buy]}: There is already 'userHandler' bean method
    
  2. 各種請求的簡寫形式

    @RequestMapping(value="/buy",method=RequestMethod.POST) 等價於 @PostMapping(value="buy")

    以此類推,還有 @GetMapping@PostMapping@PutMapping@DeleteMapping

  3. 如果我們確定表單或者超鏈接會提交某個欄位數據,比如email,要求提交的參數名和目標方法的參數名保持一致。

    例如:

    /**
     * hello3(String email){} 如果請求參數有email=xx,就會將傳遞的參數值賦給String email
     * 但是要求名稱保持一致!如果不一致,那麼接收不到數據,而是null
     * @param email
     * @return
     */
    @GetMapping(value = "/hello3")
    public String hello3(String email) {
        System.out.println("hello3= " + email);
        return "success";
    }
    
    image-20230203220142357

2.7練習

編寫一個表單,以Post方式提交表單信息,後端編寫ComputerHandler,可以接收到表單信息

image-20230203220422270

computer.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>hw-電腦信息</title>
</head>
<body>
<h1>電腦信息</h1>
<form action="computer/info" method="post">
    品牌:<input type="text" name="brand"/><br/>
    價格:<input type="text" name="price"/><br/>
    數量:<input type="text" name="nums"/><br/>
    <input type="submit" value="提交">
</form>
</body>
</html>

ComputerHandler:

package com.li.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author 李
 * @version 1.0
 */
@RequestMapping("/computer")
@Controller
public class ComputerHandler {
    //註意接收的參數名要和info方法的形參名一致
    @PostMapping("/info")
    public String info(String brand, String price, String nums) {
        System.out.println("brand=" + brand +
                " price=" + price + " nums=" + nums);
        return "success";
    }
}

redeployTomcat,訪問:http://localhost:8080/springmvc/computer.jsp,輸入信息,點擊提交表單。

image-20230203221946716

後臺輸出:

image-20230203222022381

3.Postman介面測試工具

3.1Postman介紹

具體安裝步驟

(1)下載Postman軟體

image-20230204183500108

(2)安裝

  1. 右鍵安裝包,選擇用管理員身份運行。Postman不會讓你選擇安裝路徑,會直接安裝,一般安裝在系統盤

  2. 安裝成功後,桌面上會出現快捷圖標

    image-20230204183814920

3.2Postman快速入門

快速入門需求說明:使用 Postman向 http://www.baidu.com 發出 get請求,得到返回的 html格式數據

快速入門-實現步驟

  1. 進入Postman,預設界面如下:

    image-20230204184844296
  2. 創建Http Request,如果你已經創建過,會直接進入Workspace

    image-20230204185028684 image-20230204185206183
  3. 在新頁面輸入要測試的 url,點擊save

    image-20230204193214282
  4. 在彈出的新視窗中點擊Create a collection

    image-20230204193350020
  5. 在彈出的新視窗中填入collection名稱,點擊create,然後點擊save

    image-20230204193557974
  6. 配置完畢的界面

    image-20230204194310950
  7. 點擊Send按鈕,即可向目標url發送請求,獲取返回數據

3.3Postman完成Controller層測試

(1)測試用例1

使用Postman,完成對之前編寫的UserHandler方法的請求測試

@RequestMapping(value = "/user")
@Controller  //UserHandler就是一個處理器/控制器,註入到spring容器
public class UserHandler {
	@RequestMapping(value = "/find", params = "bookId=100", method = RequestMethod.GET)
    public String search(String bookId) {
        System.out.println("查詢書籍 bookId=" + bookId);
        return "success";
    }
}

測試

  1. 確定請求地址url:http://localhost:8080/springmvc/user/find
  2. 使用請求的方式:Get
  3. 確定請求的參數/數據:bookId=100
  4. 確定 Header有沒有特殊的指定:無

點擊Send,返回數據,測試成功。

image-20230204200932993

(2)測試用例2

@RequestMapping(value = "/user")
@Controller  //UserHandler就是一個處理器/控制器,註入到spring容器
public class UserHandler {
    @RequestMapping(value = "/message/**")
    public String im() {
        System.out.println("發送消息");
        return "success";
    }
}

測試

  1. 確定請求地址url:http://localhost:8080/springmvc/user/message/aa/bb/cc
  2. 使用請求的方式:Get 或者 Post
  3. 確定請求的參數/數據:無
  4. 確定 Header有沒有特殊的指定:無

點擊Send,返回數據,測試成功。

image-20230204201536846

(3)測試用例3

@RequestMapping(value = "/user")
@Controller  //UserHandler就是一個處理器/控制器,註入到spring容器
public class UserHandler {
    @RequestMapping(value = "/reg/{username}/{userid}")
    public String register(@PathVariable("username") String name,
                           @PathVariable("userid") int id) {
        System.out.println("接收到的參數--username=" + name + "--userid=" + id);
        return "success";
    }
}

測試

  1. 確定請求地址url:http://localhost:8080/springmvc/user/reg/jack/1000
  2. 使用請求的方式:Get 或者 Post
  3. 確定請求的參數/數據:無
  4. 確定 Header有沒有特殊的指定:無

點擊Send,返回數據,測試成功。

image-20230204202044934

關於Postman的其他使用,在講解框架和項目時,再具體演示


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在種草了很多天之後,最近終於在淘寶下單了友善 nanoPi R5S。 選擇友善 nanoPi R5S 有兩點主要理由: 1. 自帶 EMMC 存儲,可以使用 RockChip 提供的 MaskRom 模式直接連線燒系統,不依賴 TF 卡(我覺得 TF 卡太累贅了,買普通的又慢又不穩定,對於我這種新手 ...
  • Docker部署SpringBoot項目 前言: 以前幾次在雲伺服器上部署項目都是手動打包,安裝mysql等環境最後再部署運行,相對比較麻煩而且加上網上各種教程質量層次不齊,如果過程中出錯的話排查問題對於新人來說已經夠喝一壺了。(我自己第一次手動裝mysql8.0就出過問題,最後找不到問題所在只能推 ...
  • Git for Windows 的 Bash 有一個很實用的功能,如果當前目錄處於 Git 倉庫中,那麼命令行中會顯示當前 Git 分支的名稱(見下圖)。 然而原版的 MSYS2 Bash 沒有這個功能(見下圖),不過我們可以自己動手配置出相同的效果。 配置方法 打開 MSYS2 的家目錄,找到 . ...
  • 一:背景 1. 講故事 上一篇寫完 SQLSERVER 的四個事務隔離級別到底怎麼理解? 之後,有朋友留言問什麼時候可以把 snapshot 隔離級別給補上,這篇就來安排,快照隔離級別看起來很魔法,不過在修車之前,得先看下怎麼開車。 二:snapshot 隔離詳解 1. snapshot 之前的困境 ...
  • 洛谷oj題單【入門2】分支結構-入門難度(Java) 來源:https://www.luogu.com.cn/training/101#problems P5709 【深基2.習6】Apples Prologue / 蘋果和蟲子 import java.util.Scanner; public cl ...
  • 以下內容為本人的學習筆記,如需要轉載,請聲明原文鏈接 微信公眾號「ENG八戒」https://mp.weixin.qq.com/s/B1hH5Qzd2RkAiiUId1tLWw 本文大概 2874 個字,閱讀需花 10 分鐘 內容不多,但也花了一些精力 如要交流,歡迎關註我然後評論區留言 謝謝你的點 ...
  • odoo菜單定義和修改學習總結 環境 odoo-14.0.post20221212.tar 定義菜單 方式1: <?xml version="1.0"?> <odoo> <menuitem id="root_menu_id" name="TopMenu" web_icon="estate,stati ...
  • REST和SpringMVC映射請求數據 7.REST-優雅的url請求風格 7.1REST基本介紹 REST風格詳細介紹 REST:即 Representational State Transfer,表述性狀態傳遞。它結構清晰,同時可以隱藏行為。 通過一個url來直觀展示傳統風格與REST風格的區 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...