Spring不同類型參數傳參

来源:https://www.cnblogs.com/spring-ioc/archive/2022/07/15/16482856.html
-Advertisement-
Play Games

普通類型傳參 當POJO中使用簡單類型屬性時, 參數名稱與POJO類屬性名保持一致 POJO類 public class User { private String name; private Integer age; public String getName() { return name; } ...


普通類型傳參

當POJO中使用簡單類型屬性時, 參數名稱與POJO類屬性名保持一致

POJO類

 

public class User {
    private String name;
    private Integer age;
    
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public Integer getAge() {
        return age;
    }
​
    public void setAge(Integer age) {
        this.age = age;
    }
​
}

 

Controller

@RequestMapping("/requestParam1")
public String requestParam1(String name ,String age){
    System.out.println("name="+name+",age="+age);
    return "page.jsp";
}

 

  訪問URL: http://localhost/requestParam1?name=itheima&age=14 

 

 **@RequestParam** 的使用  類型: 形參註解  位置:處理器類中的方法形參前方  作用:綁定請求參數與對應處理方法形參間的關係
//方法傳遞普通類型參數,使用@RequestParam參數匹配URL傳參中的參數名稱與方法形參名稱
//http://localhost/requestParam2?userName=Jock
@RequestMapping("/requestParam2")
public String requestParam2(@RequestParam(value = "userName",required = true) String name){
    System.out.println(name);
    return "page.jsp";
}
訪問http://localhost/requestParam2?userName=Jock 總結一下就是使得url中的請求參數與形參保持一致      

POJO類型參數傳參

當POJO中使用簡單類型屬性時, 參數名稱與POJO類屬性名保持一致 

1

POJO類

public class User {
    private String name;
    private Integer age;
    
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public Integer getAge() {
        return age;
    }
​
    public void setAge(Integer age) {
        this.age = age;
    }
​
}

 

Controller

@RequestMapping("/requestParam3")
public String requestParam3(User user){
    System.out.println("name="+user.getName());
    return "page.jsp";
}

 

最終訪問http://localhost/requestParam3?name=itheima&age=14  

方法傳遞POJO類型參數,URL地址中的參數作為POJO的屬性直接傳入對象

 

**參數衝突**
當POJO類型屬性與其他形參出現同名問題時,將被同時賦值
建議使用@RequestParam註解進行區分

 

 

 

 

2

Controller

//當方法參數中具有POJO類型參數與普通類型參數嘶,URL地址傳入的參數不僅給POJO對象屬性賦值,也給方法的普通類型參數賦值

@RequestMapping("/requestParam4")
public String requestParam4(User user,int age){
    System.out.println("user="+user+",age="+age);
    return "page.jsp";
}

 最終訪問//http://localhost/requestParam4?name=Jock&age=39

 

 

複雜POJO類型參數

3
當POJO中出現對象屬性時,參數名稱與對象層次結構名稱保持一致  

 POJO

public class User {
    private String name;
    private Integer age;

    private Address address;
    
    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

}

 

 Controller

使用對象屬性名.屬性名的對象層次結構可以為POJO中的POJO類型參數屬性賦值


@RequestMapping("/requestParam5")
public String requestParam5(User user){
    System.out.println(user.getAddress().getCity());
    return "page.jsp";
}

 訪問//http://localhost/requestParam5?address.city=beijing  

一層套一層

 

 

 

4 當POJO中出現List,保存對象數據,參數名稱與對象層次結構名稱保持一致,使用數組格式描述集合中對象的位置

POJO

public class User {
    private String name;
    private Integer age;
    private List<Address> addresses;
}

public class Address {
    private String province;
    private String city;
    private String address;
}

 

Controller

 

POJO中List對象保存POJO的對象屬性賦值,使用[數字]的格式指定為集合中第幾個對象的屬性賦值


@RequestMapping("/requestParam6")
public String requestParam6(User user){
    System.out.println(user);
    return "page.jsp";
}

 訪問//http://localhost/requestParam7?addresses[0].city=beijing&addresses[1].province=hebei

 

 

5  **當POJO中出現Map,保存對象數據,參數名稱與對象層次結構名稱保持一致,使用映射格式描述集合中對象的位置** 

POJO

 public class User {
    private String name;
    private Integer age;
    private Map<String,Address> addressMap;
}
public class Address {
    private String province;
    private String city;
    private String address;
}

Controller

POJO中Map對象保存POJO的對象屬性賦值,使用[key]的格式指定為Map中的對象屬性賦值

@RequestMapping("/requestParam8")
public String requestParam8(User user){
    System.out.println(user.getAddressMap());
    return "page.jsp";
}

http://localhost/requestParam8?addressMap['job'].city=beijing&addressMap['home'].province=henan

 

數組與集合類型參數傳參

數組類型參數

請求參數名與處理器方法形參名保持一致,且請求參數數量> 1個  

訪問URL: http://localhost/requestParam9?nick=Jockme&nick=zahc  


@RequestMapping("/requestParam9")
public String requestParam9(String[] nick){
    System.out.println(nick[0]+","+nick[1]);
    return "page.jsp";
}

集合類型參數
保存簡單類型數據,請求參數名與處理器方法形參名保持一致,且請求參數數量> 1個
訪問URL: http://localhost/requestParam10?nick=Jockme&nick=zahc

@RequestMapping("/requestParam10")
public String requestParam10(@RequestParam("nick") List<String> nick){
    System.out.println(nick);
    return "page.jsp";
}

註意: SpringMVC預設將List作為對象處理,賦值前先創建對象,然後將nick作為對象的屬性進行處理。由於
List是介面,無法創建對象,報無法找到構造方法異常;修複類型為可創建對象的ArrayList類型後,對象可
以創建,但沒有nick屬性,因此數據為空。此時需要告知SpringMVC的處理器nick是一組數據,而不是一個單
一數據。通過@RequestParam註解,將數量大於1個names參數打包成參數數組後, SpringMVC才能識別該數
據格式,並判定形參類型是否為數組或集合,並按數組或集合對象的形式操作數據。  

 


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

-Advertisement-
Play Games
更多相關文章
  • 目前很多應用都有身份證、銀行卡一鍵識別功能,但面對各種會員卡、通行證、駕駛證、行駛證等日常生活中經常用到的卡證,因為不同商家的卡號位置,版面樣式各異,所以無法使用類似身份證的專門的身份證識別API,如果要在旅游類App、商超類App等手動輸入卡證號碼,不僅繁瑣還容易出錯,沒有很好的交互體驗。此時,使 ...
  • 生命周期 組件從開始到結束的全過程 創建階段:beforeCreate、created 掛載階段:beforeMount、mounted 更新階段:beforeUpdate、updated 銷毀階段:beforeDestroy、destroyed 與動態組件有關的兩個特殊的鉤子: activated ...
  • 自己的官方模板一直沒有弄,今天看到了一個不錯的主題網站,於是果斷尋求方法進行美化,看了不少博客園的博客,發現一些博客非常驚艷,這些基本都屬於自己定製的,於是開始自定義美化起來。 1. 開通javaScript許可權 進入管理>設置>勾選下麵的JS許可權,然後填寫一下開通的理由等待管理員進行審核通過。 2 ...
  • 混合指令(Mixin)用於定義可重覆使用的樣式,避免了使用無語意的 class,比如 .float-left。混合指令可以包含所有的 CSS 規則,絕大部分 Sass 規則,甚至通過參數功能引入變數,輸出多樣化的樣式。 ...
  • 本文簡介 本文主要講解使用 NodeJS 操作 Redis ,順便會先帶一帶 Redis 基礎用法。 在寫本文時,使用 NPM 安裝的 Redis 依賴包已經到了 4.1.0 版本了。我以前用過 2.8 ,這兩個版本在用法上也是有差別的。可能一些老項目還在用老版本的依賴包。所以我會把2個版本的用法都 ...
  • java基礎知識圖解 軟體開發 軟體開發 軟體,即一系列按照特定順序組織的電腦數據和指令的集合。有系統軟體和應用軟體之分。 人機交互方式 圖形化界面(Graphical User Interface GUI):這種方式簡單直觀,使用者易於接受,容易上手操作。 命令行方式(Command Line ...
  • 利用spring boot多數據源功能,可以同時支持不同類型資料庫mysql,oracle,postsql,sql server等,以及相同類型資料庫不同的schema。 ...
  • 幾年前我總結過DDD戰術設計的一些可落地的經驗,現在回過頭來發現,當初對這些概念的理解還是沒有到位。比如戰術設計的各個模塊是如協作的。哪些是問題空間問題,哪些是解方案空間問題 這篇文章重新闡述下。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...