Spring MVC数据绑定
- public String other(Locale locale, Principal principal)
- java.util.Locale:得到当前请求的本地化信息,默认等价于ServletRequest.getLocale(),如果配置LocaleResolver解析器则由它决定Locale,后续介绍;
java.security.Principal:该主体对象包含了验证通过的用户信息,等价于HttpServletRequest.getUserPrincipal()。
- http://jinnianshilongnian.iteye.com/blog/1698916
且不能直接绑定到map,list,set等,因为他们是接口 ,并不能实例化,若要绑定到其中,需要放在某个bean中。
浅谈 SpringMVC 数据绑定
页面传数据有两种方式
1、参数与值对,一大堆参数与一大堆值对,form提交时常用
这种,Spring mvc可以直接在后台绑定到方法的参数中,如参数为permissions,则就可以直接绑定到该参数上。
2、json字符串型
以{}为开始与结束的标志
这种对于没有插件的Spring来说是无法绑定的,要绑定则需要
扩展SpringMVC以支持绑定JSON格式的请求参数
或者可以使用@RequestBody把整个请求作为整体传递给后台
使用时机:
A) GET、POST方式提时, 根据request header Content-Type的值来判断:
- application/x-www-form-urlencoded, 可选(即非必须,因为这种情况的数据@RequestParam, @ModelAttribute也可以处理,当然@RequestBody也能处理);
- multipart/form-data, 不能处理(即使用@RequestBody不能处理这种格式的数据);
- 其他格式, 必须(其他格式包括application/json, application/xml等。这些格式的数据,必须使用@RequestBody来处理);
B) PUT方式提交时, 根据request header Content-Type的值来判断:
- application/x-www-form-urlencoded, 必须;
- multipart/form-data, 不能处理;
- 其他格式, 必须;
说明:request的body部分的数据编码格式由header部分的Content-Type指定;
method(
@RequestBody
Map map) {
map.get(
"code"
);
}
这样也是可以的,但是并不能绑定到对象上,不建议使用。
method(
@RequestBody
JSONObject jsonObj) {
jsonObj.getString(
"code"
);
}
这样也行,前提是要配置转换器
前台传数组的话必须使用param[index]="xxx"来传递,如果没有index也会有问题。但是如此的话,直接使用对象发送ajax就有问题了,必须使用html标签名为param[index]来最终传递对象。
js中对象不能
{
s[0]=1,
s[1]=2
}
这种形式定义数组。
而且若不以这种形式定义数组,提交后的参数中并没有数组下表,后台绑定数据可能有误。
若直接post js对象,且不经过json转换,则js对象中的数组会变为
name[]=xx
name[]=yy
的这种形式
使用BindingResult返回错误信息到页面。
http://blog.sina.com.cn/s/blog_6829be5c0101alxh.html