天天看点

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)

【SpringMVC】(3)浅谈前台往后台传参

  • (1)基本介绍
  • (2)准备表单和pojo实体类
      • (2.1)前端代码index.jsp
      • (2.2)pojo实体类(省略setget方法和toString)
  • (3)五种传参方式(开始Controller)
      • (3.1)接收普通请求参数(用参数变量接收)
            • (3.1.1)Controller编写
            • (3.1.2)前台输入数据
            • (3.1.3)运行效果
      • (3.1)接收普通请求参数(用pojo实体类接收)
      • (3.2)使用@RequestParam注解获取参数
      • (3.3)使用URL传递参数(RESTful风格)
      • (3.4)传递JSON参数(参数较多转成JSON集,@RequestAttribute或者@RequestBody)
      • (3.5)接收列表数据和表单序列化
            • (3.5.1)传递数组
            • (3.5.2)传递多个角色数组
            • (3.5.3)传递序列化表单

(1)基本介绍

前台往后台发送请求的时候,往往需要同时传递参数,用Controller控制器接收,这样控制器才能对参数进行处理。

  • RESTful风格:把参数写到请求路径中,而不是以HTTP请求参数
  • JSON:比如查询用户的时候,需要分页,可能用户的信息非常多,那么查询参数可能有数十个,显然一个个传参很麻烦,那就把这些参数组装成一个JSON数据集,而把分页参数作为普通参数传递,然后再把数据传递给后台

(2)准备表单和pojo实体类

(2.1)前端代码index.jsp

<html>
    <head>
        <title>请求参数绑定的讲解</title>
        <script src="js"></script>
    </head>
    <body>
        <h3>请求参数绑定的讲解</h3>
        <%--参数username和password会和Controller里方法中的参数比对--%>
        <%--也可以把这一部分调出去,写一个JavaBean,先把这段注释掉--%>
        <%--<a href="param/testParam?username=hehe & password=123">请求参数绑定</a>--%>

        <form id="form" action="param/commonParams" method="post">
            <%--Account类name属性要跟Controller里的参数一样--%>
            姓名:<input type="text" name="username"><br>
            密码:<input type="text" name="password"><br>
            金额:<input type="text" name="money"><br>
            <%--把user类的属性也封装到Account里去--%>
            用户姓名:<input type="text" name="user.uname"><br>
            用户年龄:<input type="text" name="user.age"><br>
            <input type="submit" value="提交"><br>
        </form>
    </body>
</html>
           

效果如图:

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)

(2.2)pojo实体类(省略setget方法和toString)

(1)User类

public class User implements Serializable {
    private String uname;
    private String age;
    ...
}
           

(2)Account类(包含User对象)

public class Account implements Serializable {
    private String username;
    private String password;
    private Double money;

//    引入一个实体类(获取getter方法,和toString)
    private User user;
    ...
}
           

(3)五种传参方式(开始Controller)

(3.1)接收普通请求参数(用参数变量接收)

如果传递过来的参数名称和HTTP的保存一致,那么不用任何注解也可以获取参数。上面表单提交传递三个HTTP参数,controller中用String类型和Double类型对参数直接进行获取。

如果Controller方法中的参数名称和HTTP请求参数的名称不一致,就无法获取到,允许参数为空

(3.1.1)Controller编写

@Controller
@RequestMapping("/param")
public class ParamTestController {
    @RequestMapping("/commonParams")
    public ModelAndView commonParams(String username,String password,Double money){
        System.out.println(username);
        System.out.println(password);
        System.out.println(money);
        ModelAndView mv=new ModelAndView();
        mv.setViewName("yes");
        return mv;
    }
}
           

(3.1.2)前台输入数据

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)

(3.1.3)运行效果

如图,Controller确实获取到了前台传进来的参数,并且在控制台进行了输出

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)

(3.1)接收普通请求参数(用pojo实体类接收)

(1)Controller编写

@Controller
@RequestMapping("/param")
public class ParamTestController {
    @RequestMapping("/commonParams")
    public ModelAndView commonParams(Account account){
        System.out.println(account.getUsername());
        System.out.println(account.getPassword());
        System.out.println(account.getMoney());
        ModelAndView mv=new ModelAndView();
        mv.setViewName("yes");
        return mv;
    }
}
           

(2)前台输入

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)

(3)运行效果(pojo实体类成功获取到参数,并且自动赋值给属性字段)

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)

(3.2)使用@RequestParam注解获取参数

如上所述,要求参数名称和HTTP的请求参数必须一致。如果不想保持一致就可以使用@RequestParam注解

(1)前端的参数修改成name,与参数username不再一致

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)

(2)Controller编写(用注解获取请求参数,然后再赋值给参数)

默认情况下参数不能为空,当加上required = false,就可以允许请求参数为空

@RequestMapping("/commonParams")
    public ModelAndView commonParams(@RequestParam(value = "name",required = false) String username){
        System.out.println(username);
        ModelAndView mv=new ModelAndView();
        mv.setViewName("yes");
        return mv;
    }
           

(3)运行效果(获取成功)

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)

(3.3)使用URL传递参数(RESTful风格)

适用于一些业务比较简单的应用

(1)Controller编写

@RequestMapping("/commonParams/{id}")
    public ModelAndView commonParams(@PathVariable("id") Long id){
        System.out.println(id);
        ModelAndView mv=new ModelAndView();
        mv.setViewName("yes");
        return mv;
    }
           

(2)修改URL访问路径

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)

(3.4)传递JSON参数(参数较多转成JSON集,@RequestAttribute或者@RequestBody)

(1)用jQuery传递数据

<script>
            $("#btn").click(function () {

                var data={
                    username:"孙治",
                    password:"123456",
                    money:"30",
                    user:{
                        uname:"Allen",
                        age:"18"
                    }
                }

                $.post({
                    url:"param/commonParams",
                    contentType:"application/json",
                    data:JSON.stringify(data),
                    success:function (result) {

                    }
                })
            })
        </script>
           

(2)controller编写

@RequestAttribute或者@RequestBody

@RequestMapping("/commonParams")
    public ModelAndView commonParams(@RequestAttribute Account account){
        System.out.println(account);
        ModelAndView mv=new ModelAndView();
        mv.addObject(account);
        mv.setViewName(String.valueOf(new MappingJackson2JsonView()));
        return mv;
    }
           

(3.5)接收列表数据和表单序列化

(3.5.1)传递数组

(1)JQuery传递数组

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)

(2)Controller接收数组

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)

(3.5.2)传递多个角色数组

(1)JQuery传递多个

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)

(2)Controller接收

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)

(3.5.3)传递序列化表单

(1)JQuery把表单序列化后再传递

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)

(2)Controller接收

【SpringMVC】(3)浅谈前台往后台传参(1)基本介绍(2)准备表单和pojo实体类(3)五种传参方式(开始Controller)