SpringMVC —— 请求参数绑定

目录

1、参数绑定基本方法

2、支持数据的类型

3、使用要求

1)传递的参数与控制器中的形参名称必须相同(严格区分大小写)

2)参数类型与POJO类的属性名称一致,控制器方法的参数类型是POJO类

 解决中文乱码问题

3)集合

4、自定义类型转换器

5、使用原始ServletAPI对象作为方法的参数


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("请输入正确的日期格式:年-月-日");
		}
	}
	
}

5、使用原始ServletAPI对象作为方法的参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值