SpringMVC的数据绑定

SpringMVC有两种数据绑定方式:1、API方式绑定数据 2、注解方式绑定数据


使用注解绑定数据:

1、@RequestParam 绑定单个请求参数值

2、@PathVariable绑定URI模板变量值

3、@CookieValue 绑定Cookie数据值

4、@RequestHeader 绑定请求头数据

5、@ModelAttribute 绑定参数到命令对象

6、@SessionAttributes绑定命令对象到session


通过API绑定数据:我们还可以通过如HttpServletRequest等API得到请求数据,但是推荐使用注解方式,因为注解方式使用起来更简单。

我们需要首先看看功能处理方法支持哪些类型的形式参数,以及他们的具体含义。

一、ServletRequest/HttpServletRequest和ServletResponse/HttpServletResponse


二、InputStream/OutputStream和Reader/Writer


requestBodyIn:等价于request.getInputStream();

responseBodyOut:等价于response.getOutputStream();


三、WebRequest/NativeWebRequest

WebRequest是springmvc 提供的统一请求访问的接口,不仅仅可以访问请求相关数据(如参数区数据、请求头数据、但是访问不了cookie区数据),还可以访问会话和上下文中的数据;NativeWebRequest继承了WebRequest,并提供访问本地ServletAPI的方法



四、HttpSession


session访问不是线程安全的,如果需要线程安全,需要设置AnnotationMethodHandlerAdapter或RequestMappingHandlerAdapter的synchronizeOnSession属性为true,即可线程安全的访问session


五、命令/表单对象

Spring Web MVC 能够自动将请求参数绑定到功能处理方法的命令/表单对象上



六、Model、Map、ModelMap

Spring Web MVC 提供 Model、Map或ModelMap让我们能去暴露渲染视图需要的模型数据‘’

虽然此处注入的是三个不同的类型,但三者是同一个对象

AnnotationMethodHandlerAdapter和requestMappingHandlerAdapter将使用BindingAwareModelMap作为模型对象的实现,此处我们的参数都是同一个BindingAwareModelMap实例


七、Errors/BindingResult



通过注解绑定数据:

@RequestParam 绑定单个请求参数值


@RequestParam注解主要有哪些参数:

value:参数名字 ,也就是入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入

required:是否必须 ,默认是true,表示请求中一定要有相应的参数 否则报404错误码

defaultValue:默认值  ,表示如果请求中没有同名参数的默认值


表示请求中可以没有名字为username的参数,如果没有默认为Null 此处需要注意以下几点:

原子类型:必须有值,否则抛出异常,如果允许空值请使用包装类代替

Boolean 包装类类型:默认Boolean.FALSE,其他引用类型默认为null


对于多个同名请求参数的处理,例如:url?role=admin&role=user

public String requestparam(@RequestParam(value="role")String roles)

实际得到的值是roles="admin,user"。多个值以逗号隔开或者把方法参数定义为字符串数组(String[] roles)或集合(List<String> roles)


@PathVariable 绑定URI模板变量值


如请求的URL为“控制器URL/users/123/topics/456”,则自动将URL中模板变量{userId}和{topicId}绑定到通过@PathVariable注解的同名参数上,入参后userId=123、topicId=456。


@CookieValue绑定cookie数据值


传入参数类型也可以是javax.servlet.http.Cookie类型。


@RequestHeader 绑定请求头数据



@ModelAttribute 绑定请求参数到Model

@ModelAttribute 一共具有以下三种使用方式:

作用在方法参数里面:用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示使用

作用在一般方法上面:该Controller的所有方法在调用前,先执行此@ModelAttribute

作用于方法的返回值上面:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图展示使用




注意:返回值上的user会覆盖方法参数上的user2作为视图的模型名



@SessionAttributes绑定对象到session

在控制器上加入@SessionAttributes(value={"user"})

@SessionAttribute(value={"user"})

public class SessionAttributeController


调用SessionState对象的setComplete()销毁当前控制器上使用的session











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值