zoukankan      html  css  js  c++  java
  • 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";
    }
  • 相关阅读:
    PAT (Advanced Level) 1060. Are They Equal (25)
    PAT (Advanced Level) 1059. Prime Factors (25)
    PAT (Advanced Level) 1058. A+B in Hogwarts (20)
    PAT (Advanced Level) 1057. Stack (30)
    PAT (Advanced Level) 1056. Mice and Rice (25)
    PAT (Advanced Level) 1055. The World's Richest (25)
    PAT (Advanced Level) 1054. The Dominant Color (20)
    PAT (Advanced Level) 1053. Path of Equal Weight (30)
    PAT (Advanced Level) 1052. Linked List Sorting (25)
    PAT (Advanced Level) 1051. Pop Sequence (25)
  • 原文地址:https://www.cnblogs.com/cplinux/p/9785647.html
Copyright © 2011-2022 走看看