目录
1)传递的参数与控制器中的形参名称必须相同(严格区分大小写)
2)参数类型与POJO类的属性名称一致,控制器方法的参数类型是POJO类
1、参数绑定基本方法
请求参数与方法参数同名
package banding;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller("accountController")
@RequestMapping("/account")
public class AccountController {
@RequestMapping("/findById")
public String findById(int id) {
System.out.println("查询账户id:"+id);
return "success";
}
}
2、支持数据的类型
1)基本数据类型和String类型
2)实体类(POJO)及关联的实体类
3)数组和集合类型
3、使用要求
(对应2)
1)传递的参数与控制器中的形参名称必须相同(严格区分大小写)
2)参数类型与POJO类的属性名称一致,控制器方法的参数类型是POJO类
package banding;
public class Account {
private int id;
private String name;
private double money;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
@Override
public String toString() {
return "Account [id=" + id + ", name=" + name + ", money=" + money + "]";
}
}
当POJO类包含关联对象时
package banding;
//关联对象的实体类
public class Address {
private String proviceName;
private String cityName;
public String getProviceName() {
return proviceName;
}
public void setProviceName(String proviceName) {
this.proviceName = proviceName;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
@Override
public String toString() {
return "Address [proviceName=" + proviceName + ", cityName=" + cityName + "]";
}
}
解决中文乱码问题
post方法:
web.xml添加
<!-- 配置SpringMVC编码过滤器 -->
<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>
<!-- 启动过滤器 -->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
springmvc.xml添加
<!-- 配置Spring注解驱动 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 设置静态不过滤 -->
<mvc:resources location="/css/" mapping="/css/**"/><!-- 样式 -->
<mvc:resources location="/images/" mapping="/images/**"/><!-- 图片 -->
<mvc:resources location="/scripts/" mapping="/javascript/**"/><!-- js -->
修改一段配置
get方法:
3)集合
List集合类型:
User
package banding;
import java.util.List;
//一个用户实体类,包含多个账户
public class User {
private String username;
private String password;
private Integer age;
private List<Account> list;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public List<Account> getList() {
return list;
}
public void setList(List<Account> list) {
this.list = list;
}
@Override
public String toString() {
return "User [username=" + username + ", password=" + password + ", age=" + age + ", list=" + list + "]";
}
}
Map集合类型
4、自定义类型转换器
解决方法:
<!-- 配置自定义类型转换器:他的配置方式是采用注册服务的方式实现的 -->
<bean id="converterService" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="banding.StringToDateConverter"></bean>
</set>
</property>
</bean>
<!-- 配置Spring注解驱动 -->
<mvc:annotation-driven conversion-service="converterService"></mvc:annotation-driven>
StringToDateConverter
package banding;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.springframework.core.convert.converter.Converter;
import org.springframework.util.StringUtils;
public class StringToDateConverter implements Converter<String, Date>{
@Override
public Date convert(String source) {
DateFormat format = null;
try {
if(StringUtils.isEmpty(source)) {
throw new NullPointerException("请输入正确的数据");
}
format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse(source);
return date;
} catch (Exception e) {
throw new RuntimeException("请输入正确的日期格式:年-月-日");
}
}
}