• 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";
    }
  • 相关阅读:
    【异常记录(11)】 Web应用程序项目 已配置为使用 IIS。无法访问 元数据库。您没有足够的特权访问计算机上的 IIS 网站。Unable to access the IIS metabase. You do not have sufficient privilege to access IIS web sites on your machine.
    用 C# 计算 与 java 一致的unix时间戳 (长时间整形 如:1476956079961) Unix timestamps consistent with Java format,Implemented in C #
    【异常记录(十)】 接口调用,提示跨域 Cross-domain calling interface, Access-Control-Allow-Origin
    【异常记录(九)】 System.Threading.ThreadAbortException: 正在中止线程
    数据结构-kmp算法
    数据结构-线性表 (栈,队列,串)
    dfs序
    树上倍增
    网络流
    树状数组题目合集
  • 原文地址:https://www.cnblogs.com/cplinux/p/9785647.html
Copyright © 2020-2023  润新知