springMVC 學習 五 參數傳遞(包括restful風格)


(一)SpringMVC Controller接受參數的方式  

 

(1) 前端傳遞的參數,在springMVC的controller中使用基本數據類型或者String 類型進行接受

在前端有一個form表單,需要傳遞姓名和年齡,在controller可以采用基本數據類型或者String進行接受,

<form action="demo" method="post">
        名字:<input type="text" name="name"/><br/>
        年齡:<input type="text" name="age"/><br/>
        <input type="submit" value="提交"/><br/>
 </form>

此時值需要接受參數的名稱和傳遞的參數名稱一致就行

fun01(String name,int age)
@Controller
public class DemoController {
    
    @RequestMapping("/demo")
    public String fun01(String name,int age) {//字符串的返回值代表代表要跳轉的頁面
        System.out.println(name);
        System.out.println(age);
        System.out.println("指定了demo");
        //返回值最好寫全路徑,全路徑就是以"/"開頭的路徑,否則就是相對路徑,
        //相對路徑就是以相對當前方法的映射路徑,例如如果返回值是"main.jsp",是相對路徑,最后的絕對路徑是
        //"demo/main.jsp"
        return "/main.jsp";
    }
}

(2) 前端傳遞的參數,在springMVC的controller中使用  類類型進行接受(走get/set方法)

此時需要 類類型的屬性名稱與前端傳遞參數的參數名稱一致

@Controller
public class DemoController {
    
    @RequestMapping("/demo")
    public String fun01(People peo) {//字符串的返回值代表代表要跳轉的頁面
        
        System.out.println(peo.getName());
        System.out.println(peo.getAge());
        System.out.println("指定了demo");
        //返回值最好寫全路徑,全路徑就是以"/"開頭的路徑,否則就是相對路徑,
        //相對路徑就是以相對當前方法的映射路徑,例如如果返回值是"main.jsp",是相對路徑,最后的絕對路徑是
        //"demo/main.jsp"
    
        return "/main.jsp";
    }
}

(3) 前端傳遞的參數,在springMVC的controller中使用HttpServletRequest進行接受

@Controller
public class DemoController {
    
    @RequestMapping("/demo")
    public String fun01(HttpServletRequest req) {//字符串的返回值代表代表要跳轉的頁面
        
        System.out.println("指定了demo");
        //返回值最好寫全路徑,全路徑就是以"/"開頭的路徑,否則就是相對路徑,
        //相對路徑就是以相對當前方法的映射路徑,例如如果返回值是"main.jsp",是相對路徑,最后的絕對路徑是
        //"demo/main.jsp"
        System.out.println(req.getParameter("name"));
        System.out.println(req.getParameter("age"));
        return "/main.jsp";
    }
}

(4) 前端傳遞的參數,在springMVC的controller中 同時使用上述三中方法進行接受

@Controller
public class DemoController {
    
    @RequestMapping("/demo")
    public String fun01(People peo, String name,int age,HttpServletRequest req) {//字符串的返回值代表代表要跳轉的頁面
        System.out.println(name);
        System.out.println(age);
        System.out.println(peo.getName());
        System.out.println(peo.getAge());
        System.out.println("指定了demo");
        //返回值最好寫全路徑,全路徑就是以"/"開頭的路徑,否則就是相對路徑,
        //相對路徑就是以相對當前方法的映射路徑,例如如果返回值是"main.jsp",是相對路徑,最后的絕對路徑是
        //"demo/main.jsp"
        System.out.println(req.getParameter("name"));
        System.out.println(req.getParameter("age"));
        return "/main.jsp";
    }
}

(二)@RequestParam()注解

(1) 如果請求參數名和方法參數名不對,使用value屬性

@RequestMapping("demo")
public String demo(@RequestParam(value="name1") String name,@RequestParam(value="age1")int age)
{
    System.out.println("執行 demo"+" "+name+""+age);
    return "main.jsp";
}

(2)如果接受參數是基本類型,且接受參數類型與null無法進行兼容,此時可以采用包裝類型或者采用默認值,使用defaultValue屬性

@RequestMapping("page")
public String page(@RequestParam(defaultValue="2")int pageSize,@RequestParam(defaultValue="1") int pageNumber){
  System.out.println(pageSize+" "+pageNumber);
  return "main.jsp";
}

(3)如果強制要求必須有某個參數,使用required屬性

@RequestMapping("demo2")
public String demo2(@RequestParam(required=true) String name){
  System.out.println("name 是 SQL 的查詢條件,必須要傳遞 name 參數"+name);
  return "main.jsp";
}

(4)傳遞List類型的參數 使用value屬性,因為在前端傳遞過來的list都會放入一個參數名稱中,只要把這個參數名稱和一個List類型變量進行綁定

@RequestMapping("demo5")
public String demo5(String name,int age,@RequestParam("hover")List<String> abc){
  System.out.println(name+" "+age+" "+abc);
  return "main.jsp";
}

(5)請求參數中對象.屬性格式

jsp中的代碼如下

<input type="text" name="peo.name"/>
<input type="text" name="peo.age"/>

此時需要創建一個類,類中要有一個屬性是peo,且這個屬性的類型必須是包含name,age這個兩個屬性的類,兩個類都要有get/set方法,

Demo類型

public class Demo {
    private People peo;

    public People getPeo() {
        return peo;
    }

    public void setPeo(People peo) {
        this.peo = peo;
    }

    @Override
    public String toString() {
        return "Demo [peo=" + peo + "]";
    }
    
}

People 類型

public class People {
    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;
    }
    @Override
    public String toString() {
        return "People [name=" + name + ", age=" + age + "]";
    }
    
}

controller 的接受參數

@RequestMapping("demo6")
public String demo6(Demo demo){
  System.out.println(demo);
  return "main.jsp";
}

(三) restful風格的參數

首先請求參數的格式一定的要求,老的方式是<a href="demo8?name=張三&age=23">跳轉</a>

而restful格式是:<a href="demo8/123/abc">跳轉</a>

在控制器中:

 在@RequestMapping 中一定要和請求格式對應
 {名稱} 中名稱自定義名稱
 @PathVariable 獲取@RequestMapping 中內容,默認按照方法參數名稱去尋找.

@RequestMapping("demo8/{id1}/{name}") public String demo8(@PathVariable String name,@PathVariable("id1") int age){   System.out.println(name +" "+age);   return "/main.jsp"; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM