SpringMVC–参数
- 表单传Date,String值
- 表单传对象
- 表单传List集合
- 表单传Map集合
- 传JSON参数
表单传Date,String值
<h1>测试参数</h1>
<form action="test1" method="post">
Name<input type="text" name="stname">
Age<input type="text" name="age">
Birthday<input type="date" name="birthday">
<input type="submit" value="提交">
</form>
这里要注意的是spring自带的日期转换只会转换xxxx/xx/xx,所以我们得重写日期转换类.代码如下:
/**
* 日期转换器 年月日, xxxx-xx-xx,xxxx/xx/xx
*/
public class MyDateConverter implements Converter<String,Date> {
@Override
public Date convert(String value) {
SimpleDateFormat sdf=null;
Date ok=null;
if (value.contains("年")){
sdf=new SimpleDateFormat("yyyy年MM月dd日");
}else if (value.contains("-")){
sdf=new SimpleDateFormat("yyyy-MM-dd");
}else if (value.contains("/")){
sdf=new SimpleDateFormat("yyyy/MM/dd");
}
try {
ok=sdf.parse(value);
} catch (ParseException e) {
e.printStackTrace();
}
return ok;
}
}
并且要在配置类进行配置
<!-- 配置spring mvc注解驱动(开启mvc组件)-->
<mvc:annotation-driven conversion-service="datezhuanhuan"/>
<!-- 日期转换器-->
<bean id="datezhuanhuan" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<bean class="Mr_xiao.uitl.MyDateConverter" />
</list>
</property>
</bean>
注意:转换器id与conversion-service要相同
测试类如下:
@RequestMapping("/test1")
public String test1(String stname, int age, Date birthday){
System.out.println("stname="+stname);
System.out.println("age="+age);
System.out.println("birthday="+birthday);
return "success";
}
注意测试类顶部记得加@Controller
表单传对象
首先创一个实体类
public class Student {
String stname;
int age;
Date birthday;
public String getStname() {
return stname;
}
public void setStname(String stname) {
this.stname = stname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Student{" +
"stname='" + stname + '\'' +
", age=" + age +
", birthday=" + birthday +
'}';
}
}
再用表单传student对象
代码如下:
<h1>测试参数</h1>
<form action="test2" method="post">
Name<input type="text" name="stname">
Age<input type="text" name="age">
Birthday<input type="date" name="birthday">
<input type="submit" value="提交">
</form>
注:表单组件name要与实体类属性名相同
测试类:
//接收对象
@RequestMapping("/test2")
public String test2(Student stu){
System.out.println("对象="+stu);
return "success";
}
表单传list集合
首先创建两个实体类
/**
* 商品类
*/
public class Goods {
String name;
int num;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
@Override
public String toString() {
return "Goods{" +
"name='" + name + '\'' +
", num=" + num +
'}';
}
}
/**
* 购物车
*/
public class Cart {
List<Goods> list;
Map<String,Goods> map;
public Map<String, Goods> getMap() {
return map;
}
public void setMap(Map<String, Goods> map) {
this.map = map;
}
public List<Goods> getList() {
return list;
}
public void setList(List<Goods> list) {
this.list = list;
}
@Override
public String toString() {
return "Cart{" +
"list=" + list +
", map=" + map +
'}';
}
}
表单如何传参?
如下:
<h1>测试list集合</h1>
<form action="test3" method="post">
<input type="text" name="list[0].name" />
<input type="text" name="list[0].num" />
<br />
<input type="text" name="list[1].name" />
<input type="text" name="list[1].num" />
<br />
<input type="text" name="list[2].name" />
<input type="text" name="list[2].num" />
<input type="submit" value="提交">
</form>
测试类
//直接接收 list<Goods>集合
@RequestMapping("/test3")
public String test3(Cart cart){
System.out.println("购物车="+cart);
return "success";
}
表单传map集合
map与list唯一不同之处在于表单组件的name值
即:
<h1>测试map集合</h1>
<form action="test3" method="post">
<input type="text" name="map['商品1'].name" />
<input type="text" name="map['商品1'].num" />
<br />
<input type="text" name="map['商品2'].name" />
<input type="text" name="map['商品2'].num" />
<br />
<input type="text" name="map['商品3'].name" />
<input type="text" name="map['商品3'].num" />
<input type="submit" value="提交">
</form>
其他代码块都相同。
JSON传参
使用JSON得先导入jar包
使用maven导入:
<!-- JSON转换类-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
</dependencies>
可用按钮传值进行测试
<h1>传Json参数 --传统表单NONONO</h1>
<button id="testjson">SEND</button>
<script>
$(function () {
$("#testjson").click(function () {
var xm = {"name": "小米", "num": 12};
$.ajax({
url: 'anno/testjson',
type: 'post',
contentType: 'application/json',
data: JSON.stringify(xm),
success: function (data) {
alert(data)
}
})
})
</script>
测试类是如何接收?
如下:
//参数可以是 JSON requestBody
@RequestMapping("/testjson")
public String testjson(@RequestBody Goods sp){
System.out.println("对象:"+sp);
return "success";
}
json关键注释:@RequestBody
拓展
中文乱码处理,表单提交难免会遇到中文乱码
只需要一步:在web.xml进行配置
<!-- 处理中文乱码-->
<filter>
<filter-name>charcode</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>charcode</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这样就不会中文乱码啦…
参数可设置默认值
关键注释:@RequestParam
案例:
//参数可加默认值 requestParam
@RequestMapping("/test1")
public String test1(@RequestParam(name = "stname",defaultValue = "张三") String stname){
System.out.println("stname="+stname);
return "success";
}
也可以在代码块进行判断赋值,不过springmvc给我们写了一个注释何必去自己判断呢,不用白不用,hhh
默认值有什么好处呢
像我们平时做分页查询,页码就可以设置默认值,当用户不传值,可让页面默认显示第一页…