请求参数的绑定说明
绑定机制
- 表单提交的数据都是k=v格式的 username=haha&password=123
- SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中方法的参数进行绑定的
- 要求:提交表单的name和参数的名称是相同的
支持的数据类型
- 基本数据类型和字符串类型:提交表单的name和参数的名称是相同的;区分大小写。
- 实体类型(JavaBean):提交表单的name和JavaBean中的属性名称需要一致;如果一个JavaBean类中包含其他的引用类型,那么表单的name属性需要编写成:对象.属性 例如:address.name
- 给集合(List、map集合等)属性数据封装:list[0].属性
实例
基本数据类型和字符串类型数据提交
①编写index.html文件
<body> <div><h2>字符串基本类型</h2></div> <form action="/SpringMVC_Demo3/save1.do" method="get"> <input type="text" name="username" placeholder="name"/><br/> <input type="text" name="age" placeholder="age"/><br/> <input type="submit"/> </form> </body>
②编写HelloController文件
@Controller public class HelloController { @RequestMapping("/save1.do") public void save1(String username,Integer age){ System.out.println(username+"\t"+age); } }
实体类型(JavaBean)的提交
①在src\main\java创建实体类com.qcby.entity.User以及set,get,toString方法
public class User { private String username; private String age; //set,get,toString方法 }
②编写index.html文件
<body> <div><h2>Java Bean</h2></div> <form action="/SpringMVC_Demo3/save2.do" method="get"> <input type="text" name="username" placeholder="name"/><br/> <input type="text" name="age" placeholder="age"/><br/> <input type="submit"/> </form> </body>
③编写HelloController文件
@Controller public class HelloController { @RequestMapping("/save2.do") public void save2(User user){ System.out.println(user.toString()); } }
实体类型(JavaBean,包含其他实体类)的提交
①在src\main\java创建实体类com.qcby.entity.Address以及set,get,toString方法
public class Address { private String province; private String city; //set,get,toString方法 }
②重构User类以及set,get,toString方法
public class User { private String username; private String age; private Address address; //set,get,toString方法 }
③编写index.html文件
<body> <div><h2>Java Bean</h2></div> <form action="/SpringMVC_Demo3/save3.do" method="get"> <input type="text" name="username" placeholder="name"/><br/> <input type="text" name="age" placeholder="age"/><br/> <input type="text" name="address.province" placeholder="province"/><br/> <!-- name="对象.属性名" --> <input type="text" name="address.city" placeholder="city"/><br/> <input type="submit"/> </form> </body>
④编写HelloController文件
@Controller public class HelloController { @RequestMapping("/save3.do") public void save3(User user){ System.out.println(user.toString()); } }
集合(List、map集合等)类型的提交
①重构User类以及set,get,toString方法
public class User { private String username; private String age; private List<Address> address; //set,get,toString方法 //IDEA中使用ALT+INSERT快速生成set,get,toString方法 }
③编写index.html文件
<body> <div><h2>Java Bean</h2></div> <form action="/SpringMVC_Demo3/save3.do" method="get"> <input type="text" name="username" placeholder="name"/><br/> <input type="text" name="age" placeholder="age"/><br/> <input type="text" name="address[0].province" placeholder="province1"/><br/> <!-- name="对象[第几个].属性名" --> <input type="text" name="address[0].city" placeholder="city1"/><br/> <input type="text" name="address[1].province" placeholder="province2"/><br/> <input type="text" name="address[1].city" placeholder="city2"/><br/> <input type="submit"/> </form> </body>
④编写HelloController文件
@Controller public class HelloController { @RequestMapping("/save4.do") public void save4(User user){ System.out.println(user.toString()); } }
【注意】@RequestMapping("")默认情况下接受的是get请求。post请求时@RequestMapping(value = "",method = RequestMethod.POST)。实例如下:
集合(List、map集合等)类型的提交
①重构User类以及set,get,toString方法
public class User { private String username; private String age; private List<Address> address; //set,get,toString方法 //IDEA中使用ALT+INSERT快速生成set,get,toString方法 }
②编写index.html文件,修改表单form的method值为post
<body> <div><h2>Java Bean</h2></div> <form action="/SpringMVC_Demo3/save3.do" method="post"> <input type="text" name="username" placeholder="name"/><br/> <input type="text" name="age" placeholder="age"/><br/> <input type="text" name="address[0].province" placeholder="province1"/><br/> <!-- name="对象[第几个].属性名" --> <input type="text" name="address[0].city" placeholder="city1"/><br/> <input type="text" name="address[1].province" placeholder="province2"/><br/> <input type="text" name="address[1].city" placeholder="city2"/><br/> <input type="submit"/> </form> </body>
③编写HelloController文件,
@Controller public class HelloController { @RequestMapping(value = "/save5.do",method = RequestMethod.POST) public void save5(User user){ System.out.println(user.toString()); } }
【注意】post请求在中文条件下会乱码,所以要对web.xml进行一些操作来防止乱码
<!--配置过滤器,解决中文乱码的问题--> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!--指定字符集--> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>