springmvc接收list参数_SpringMVC请求参数的绑定及其常⽤
注解
3.3 请求参数的绑定
绑定机制
表单中的请求都是基于key=value的
SpringMVC绑定请求参数的过程就是通过把表单提交请求参数,作为控制器中⽅法参数进⾏绑定的。
例如:
<a href="account/findAccount?accountId=10">查询账户</a>,请求参数是:accoutnId=10
/**
* 查询账户
* @return
*/
@RequestMapping("/findAccount")
public String findAccount(Integer accountId)
{
System.out.println("查询了账户。。。。"+accountId);
return "success";
}
⽀持的数据类型
基本类型参数:
包括基本类型和String类型
POJO类型参数:
包括实体类,以及关联的实体类
数组和集合类型参数:
包括List结构和Map结构的集合(包括数组)
SpringMVC绑定请求参数是⾃动实现的,但是要想使⽤,必须遵循使⽤要求。
使⽤要求
基本类型或者String类型:
要求我们的参数名称必须和控制器中⽅法的形参名称保持⼀致(严格区分⼤⼩写)
POJO类型,或者它的关联对象:
要求表单中参数名称和POJO类的属性名称保持⼀致。并且控制器⽅法的参数类型是POJO类型
集合类型,有两种⽅式:
第⼀种:
要求集合类型的请求参数必须在POJO中。在表单中请求参数名称要和POJO中集合属性名称相同。
给List集合中的元素赋值,使⽤下标。
给Map集合中的元素复制,使⽤键值对。
第⼆种:
接收的请求参数是json格式数据。需要借助⼀个注解实现。
总结
1. 请求参数的绑定说明
1. 绑定机制
1. 表单提交的数据都是k=v格式的 username=haha&password=123
2. SpringMVC的参数绑定过程是把表单提交的请求参数,作为控制器中⽅法的参数进⾏绑定
3. 要求:提交表单的name和参数的名称是相同的
1.
1. ⽀持的数据类型
1. 基本数据类型和字符串类型
2. 实体类型(JavaBean)
3. 集合数据类型(List、Map集合等)
1. 基本数据类型和字符串类型
1. 提交表单的name和参数的名称是相同的
2. 区分⼤⼩写
1. 实体类型(JavaBean)
1. 提交表单的name和JavaBean中的属性名称需要⼀致
2. 如果⼀个JavaBean类中包含其他的引⽤类型,那么表单的name属性需要编写成:address.name
1. 给集合属性数据封装
1. JSP页⾯编写⽅式:list[0].属性
1. 请求参数中⽂乱码的解决
1. 在l中配置Spring提供的过滤类
<!-- 配置过滤器,解决中⽂乱码的问题 -->
<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>
⾃定义类型转换器
使⽤场景:
我们通过前端页⾯传送到后端的参数⼀般都是String类型的,SpringMVC可以帮我们转换⼤部分的Spring类型的数据变成我们需要的基本数据类型,但仍然有不能转换的地⽅,例如⽇期格式:2020-12-8,此时我们就需要⾃定义⼀个类型转换器
使⽤步骤
Converter 接⼝,该接⼝有两个泛型。
接⼝,该接⼝有两个泛型。
第⼀步:定义⼀个类,实现 Converter
1. 第⼀步:定义⼀个类,实现
public interface Converter<S, T> {//S:表⽰接受的类型,T:表⽰⽬标类型
/**
* 实现类型转换的⽅法
*/
@Nullable
T convert(S source);
}
param name/
**
* ⾃定义类型转换器
* @author ⿊马程序员
* @Company www.ithiema
* @Version 1.0
*/
public class StringToDateConverter implements Converter<String, Date> {
/**
* ⽤于把 String 类型转成⽇期类型
*/
public Date convert(String source) {
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("输⼊⽇期有误");
}
}
}
spring 配置⽂件中配置类型转换器。
配置⽂件中配置类型转换器。 spring 配置类型转换器的机制是,将⾃定义的转换器注册到类型转换服务中2. 第⼆步:在
第⼆步:在 spring
去。
<!-- 配置类型转换器⼯⼚ -->
<bean id="converterService" class="t.support.ConversionServiceFactoryBean">
<!-- 给⼯⼚注⼊⼀个新的类型转换器 -->
<property name="converters">
<array>
<!-- 配置⾃定义类型转换器 --> <bean class="com.verter.StringToDateConverter"></bean>
</array>
</property>
</bean>
annotation-driven 标签中引⽤配置的类型转换服务
标签中引⽤配置的类型转换服务
第三步:在 annotation-driven
3. 第三步:在
<!-- 引⽤⾃定义类型转换器 -->
<mvc:annotation-driven
conversion-service="converterService"></mvc:annotation-driven>
3.4 常⽤注解
RequestParam
作⽤:把请求中的指定名称参数传递给控制器中的形参赋值
属性:
value:请求参数中的名称
rrequired:请求参数中是否必须提供此参数,默认值是true,必须提供
/**
* 接收请求
* @return */
@RequestMapping(path="/hello")
public String sayHello(@RequestParam(value="username",required=false)String name)
{ System.out.println("aaaa");
System.out.println(name);
return "success";
}
RequestBody注解
作⽤:⽤于获取请求体的内容(注意:get⽅法不可以)
属性
required:是否必须有请求体,默认值是true
/**
* 接收请求
* @return */
@RequestMapping(path="/hello") public String sayHello(@RequestBody String body) { System.out.println("aaaa");
System.out.println(body);
return "success";
}
PathVariable注解
作⽤:拥有绑定url中的占位符的。例如:url中中有/delete{id},{id}就是占位符
属性:
value:指定url中的占位符名称
Restful风格的URL
请求路径⼀样,可以根据不同的请求⽅式去执⾏后台的不同⽅法
Restful风格的URL有点
结构清晰
符合标准
易于理解
扩展⽅便
<a href="user/hello/1">⼊门案例</a>
/**
* 接收请求
* @return */ @RequestMapping(path="/hello/{id}")
public String sayHello(@PathVariable(value="id") String id)
{
System.out.println(id);
return "success";
}
RequestHeader注解
作⽤:获取指定请求头的值
属性:
value:请求头名称
@RequestMapping(path="/hello")
public String sayHello(@RequestHeader(value="Accept") String header)
{
System.out.println(header);
return "success";
}
CookieValue注解
作⽤:⽤于获取指定cookie的名称的值
属性:
value:cookie的名称
@RequestMapping(path="/hello")
public String sayHello(@CookieValue(value="JSESSIONID") String cookieValue) {
System.out.println(cookieValue);
return "success";
}
ModelAttribute注解
作⽤:
出现在⽅法上:表⽰当前⽅法会在控制器⽅法执⾏前执⾏
出现在参数上:获取指定的数据给参数赋值
应⽤场景
当提交表单数据不是完整的实体数据时,保证没有提交的字段使⽤数据库原来的数据修饰的⽅法有返回值↓
/**
* 作⽤在⽅法,先执⾏
* @param name
* @return
*/
@ModelAttribute
public User showUser(String name)
{
System.out.println("showUser执⾏了...");
// 模拟从数据库中查询对象
User user = new User();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论