Spring MVC|請求參數綁定

綁定的機制

  請求參數和控制器中方法的形參進行綁定。

形參支持的數據類型

  基本類型參數:
    包括基本類型和String類型
  POJO類型參數:
    包括實體類,以及關聯的實體類
  數組和集合類型參數:
     包括List結構和Map結構的集合(包括數組)

  SpringMVC綁定請求參數是自動實現的,但是要想使用,必須遵循使用要求。

使用要求

  如果是基本類型或者String類型:
    要求我們的參數名稱必須和控制器中方法的形參名稱保持一致。(嚴格區分大小寫)
  如果是POJO類型,或者它的關聯對象:
    要求表單中參數名稱和POJO類的屬性名稱保持一致。並且控制器方法的參數類型是POJO類型。
  如果是集合類型,有兩種方式:
    第一種: 要求集合類型的請求參數必須在POJO中。在表單中請求參數名稱要和POJO中集合屬性名稱相同。 給List集合中的元素賦值,使用下標。 給Map集合中的元素賦值,使用鍵值對。
    第二種: 接收的請求參數是json格式數據。需要藉助@RequsetBody註解實現。具體可以參考這篇博客
  注意:
    spring mvc 內置了很多數據類型轉換器,同時我們也可以自己自定義轉換器。內置的轉換器在org.springframework.core.convert.support包下。

基本類型和String類型作爲參數

jsp代碼:

<a href="${pageContext.request.contextPath}/test?username=zhangsan&age=1234">測試</a>

Controller代碼:

    @RequestMapping("/test")
    //形參和請求參數的名稱必須一樣,不然反射不到。
    public String testMethod(String username,Integer age) {
        System.out.println("username=" + username);
        System.out.println("age=" + age);
        return null;
    }

輸出:

username=zhangsan
password=1234

POJO類型作爲參數

jsp代碼:

<a href="${pageContext.request.contextPath}/test?username=zhangsan&age=22">測試</a>

Controller代碼:

    @RequestMapping("/test")
    public String testMethod(User user) {
        System.out.println(user);
        return null;
    }

實體類代碼:

public class User {

    private String username;
    private Integer age;
    //getters and setters
}

輸出:

User{username='zhangsan', age=22}

POJO類中包含引用類型參數

jsp代碼:

<a href="${pageContext.request.contextPath}/test?account.money=200">測試</a>

Controller代碼:

    @RequestMapping("/test")
    public String testMethod(User user) {
        System.out.println(user);
        return null;
    }

實體類代碼:

public class User {

    private Account account;
    //getters and setters
}
public class Account {

    private Float money;
    //getters and setters
}

輸出:

User{account=Account{money=200.0}}

POJO類中包含集合類型參數

jsp代碼:

<form action="${pageContext.request.contextPath}/test" method="post">
    <input type="text" name="accountsList[0].money"/>
    <input type="text" name="accountsMap['account1'].money"/>
    <input type="submit" value="提交"/>
</form>

Controller代碼:

    @RequestMapping("/test")
    public String testMethod(User user) {
        System.out.println(user);
        return "springStart";
    }

實體類代碼:

public class User {

    private List<Account> accountsList;
    private Map<String,Account> accountsMap;
    //getters and setters
    
}
public class Account {

    private Float money;
    //getters and setters

}

輸出:

User{accountsList=[Account{money=300.0}], accountsMap={account1=Account{money=200.0}}}
發佈了46 篇原創文章 · 獲贊 1 · 訪問量 2502
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章