SpringMVC(二) 参数绑定 与 JSON
参数绑定
http请求传输的参数都是String类型,但是Hanlder业务方法中的参数都是我们指定的数据类型,如int,Object等,所以需要处理参数的类型转换。此项工作不需要我们开发人员去完成,SpringMVC的HandlerAdapter组件会在执行Handler业务方法之前,完成参数的绑定。
基本数据类型
//以int类型为例
@RequestMapping("/itemEdit")
public String itemEdit(Integer id, Model model) {
Items items = itemService.getItemById(id);
//向jsp传递数据
model.addAttribute("item", items);
//设置跳转的jsp页面
return"editItem";
}
数类型推荐使用包装数据类型,因为基础数据类型不可以为null
整形:Integer、int
字符串:String
单精度:Float、float
双精度:Double、double
布尔型:Boolean、boolean
说明:对于布尔类型的参数,请求的参数值为true或false。
使用@RequestParam常用于处理简单类型的绑定,一般是在前台页面的name属性值和后台的实体类中的属性名不一致的情况下使用。
value:参数名字,即入参的请求参数名字,如value=“item_id”表示请求的参数区中的名字为item_id的参数的值将传入;
required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将报错。
defaultValue:默认值,表示如果请求中没有同名参数时的默认值。
public String editItem(@RequestParam(value="item_id",required=true,defaultValue="1") String id) {
}
绑定pojo类型
直接使用类名即可
@RequestMapping("/updateitem")
public String updateItem(Items items) {
itemService.updateItem(items);
return"success";
}
数组
@RequestMapping(value="/arrayType")
@ResponseBody
public String arrayType(String[] name){
StringBuffer sbf = new StringBuffer();
for(String item:name) {
sbf.append(item).append(" ");
}
return "name:"+sbf.toString();
}
List、Set集合
绑定的参数应该为List或者Set中的参数类型
public class UserList {
private List<User> users;
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
@RequestMapping(value="/listType")
@ResponseBody
public String listType(UserList userList){
StringBuffer sbf = new StringBuffer();
for(User user:userList.getList()){
sbf.append(user);
}
return "用户:"+sbf.toString();
}
<form action="listType" method="post">
用户1姓名:<input type="text" name="users[0].name"/><br/>
用户1年龄:<input type="text" name="users[0].age"/><br/>
用户2姓名:<input type="text" name="users[1].name"/><br/>
用户2年龄:<input type="text" name="users[1].age"/><br/>
用户3姓名:<input type="text" name="users[2].name"/><br/>
用户3年龄:<input type="text" name="users[2].age"/><br/>
<input type="submit" value="提交"/>
</form>
Map
JAVA方法,遍历Map集合的key值,通过key值获取value。JSP页面与List和Set不同的是,不能通过下标区分不同的对象,改为通过key值区分。
<form action="mapType" method="post">
用户1姓名:<input type="text" name="users['a'].name"/><br/>
用户1年龄:<input type="text" name="users['a'].age"/><br/>
用户2姓名:<input type="text" name="users['b'].name"/><br/>
用户2年龄:<input type="text" name="users['b'].age"/><br/>
用户3姓名:<input type="text" name="users['c'].name"/><br/>
用户3年龄:<input type="text" name="users['c'].age"/><br/>
<input type="submit" value="提交"/>
</form>
public class UserMap {
private Map<String,User> users;
public Map<String, User> getUsers() {
return users;
}
public void setUsers(Map<String, User> users) {
this.users = users;
}
}
@RequestMapping(value="/mapType")
@ResponseBody
public String mapType(UserMap userMap){
StringBuffer sbf = new StringBuffer();
for(String key:userMap.getUsers().keySet()){
User user = userMap.getUsers().get(key);
sbf.append(user);
}
return "用户:"+sbf.toString();
}
解决中文乱码
<!--在配置文件中加入转换器-->
<mvc:annotation-driven >
<!-- 消息转换器 -->
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>
</bean>
</mvc:message-converters>
</mvc:annotation-driven> <!--在web.xml文件中插入过滤器-->
<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>
JSON
<script type="text/javascript">
var user = {
"name":"张三",
"age":22
};
$.ajax({
url:"jsonType",
data:JSON.stringify(user),
type:"post",
contentType: "application/json;charse=UTF-8",
dataType:"text",
success:function(data){ }
})
</script>
注意
1.json数据必须用JSON.stringify()方法将对象转换成JSON字符串。
2.原生AJAX中的contentType不能省略。
//@RequestBody:接受前台传递的JSON
//@ResponseBody:返回JSON对象
@RequestMapping(value="/jsonType")
@ResponseBody
public User jsonType(@RequestBody User user){
//修改年龄
user.setAge(user.getAge()+10);
//返回前端
return user;
}
JSON补充
上面的是SpringMVC原生的JSON的方式,开发中经常使用的是阿里的fastjson来取代Spring默认的Jackson进行数据绑定。
fastjson的优势在于如果属性为空就不会将其转化为json,数据会简洁很多。
步骤:
1.pom.xml引入fastjson依赖jar包。
2.springmvc.xml中配置fastjson。
3.运行代码。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.18</version>
</dependency>
<mvc:annotation-driven >
<!-- 消息转换器 -->
<mvc:message-converters register-defaults="true">
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>
</bean>
<!-- 阿里fastjson -->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4"/>
</mvc:message-converters>
</mvc:annotation-driven>
SpringMVC(二) 参数绑定 与 JSON的更多相关文章
- springmvc(2)--参数绑定
一.以实例来看springmvc各种参数绑定方式 先定义个dto类: public class RestInDto implements Serializable { private static ...
- (转)SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解
http://blog.csdn.net/yerenyuan_pku/article/details/72511749 高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编 ...
- SpringMVC学习笔记之二(SpringMVC高级参数绑定)
一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...
- SpringMvc之参数绑定注解详解之二
2 consumes.produces 示例 cousumes的样例: 1 @Controller 2 @RequestMapping(value = "/pets", met ...
- SpringMVC的参数绑定
一.@RequestMapping注解说明 通过@RequestMapping注解可以定义不同的处理器映射规则. URL路径映射 @RequestMapping(value="/item ...
- springmvc(三) 参数绑定、
前面两章就介绍了什么是springmvc,springmvc的框架原理,并且会简单的使用springmvc以及ssm的整合,从这一章节来看,就开始讲解springmvc的各种功能实现,慢慢消化 --W ...
- SpringMVC中参数绑定
SpringMVC中请求参数的接收主要有两种方式, 一种是基于HttpServletRequest对象获取, 另外一种是通过Controller中的形参获取 一 通过HttpServletReque ...
- SpringMVC高级参数绑定(数组和List)
本节内容: 参数绑定之数组 将表单的数据绑定到List 复制下上篇博客中的工程,作为今天开发的工程. 一.参数绑定之数组 1. 需求 在商品列表页面选中多个商品,然后删除. 2. 需求分析 功能要求商 ...
- SpringMVC 请求参数绑定
什么是请求参数绑定 请求参数格式 默认是key/value格式,比如:http:xxxx?id=1&type=2 请求参数值的数据类型 都是字符串类型的各种值 请求参数值要绑定的目标类型 Co ...
随机推荐
- roscore不能启动
通过VNC 在VNC窗口上出入 roscore 得到下面错误信息 ----------------------------------------------------------- proces ...
- POJ 3252 组合数学?
大神们的题解我一个都没看懂........... 十分的尴尬 题意:算出闭区间内二进制中0的个数大于等于1的个数的数字有多少个 思路: 组合数学(n小于500的时候都可以出解,只不过高精比较麻烦). ...
- Spark RDD概念学习系列之RDD的五大特征
不多说,直接上干货! RDD的五大特征 分区--- partitions 依赖--- dependencies() 计算函数--- computer(p,context) 分区策略(Pair RDD) ...
- java中常用的转义字符
Day02_SHJavaTraing_4-3-2017 Java中允许使用转义字符‘\’来将其后的字符转变为特殊字符型常量. 一.JAVA中常用的转义字符
- css样式表格边框1px hover时为2px 实现方式
//css .flclass-cont .flclass-cont-box{width:%;display:inline-block;font-size:;margin:10px;position:r ...
- ZBrush破解版下载,ZBrush中文版下载
11月11日这个令人兴奋的日子又来了.没错,“双十一”所有网购达人狂欢的日子.但是ZBrush却让心心念念的小伙伴们失望了一把,本以为双十一期间会有相关活动的,结果,官方并未提及,事实上,ZBrush ...
- day21 模块
目录 模块 import 与 from...import 循环导入问题 解决方案一 解决方案二 Python文件的两种用途 从普通的面条型代码,到函数型代码,其实是在做什么? 封装代码,一个函数差不多 ...
- Codeforces Round #487 (Div. 2) C. A Mist of Florescence 构造
题意: 让你构造一个 n∗mn*mn∗m 矩阵,这个矩阵由 444 种字符填充构成,给定 444 个整数,即矩阵中每种字符构成的联通块个数,n,mn,mn,m 需要你自己定,但是不能超过505050. ...
- Python-超好用的Django源码解析
http://djangobook.py3k.cn/2.0/
- BZOJ 3295 [CQOI2011]动态逆序对 (三维偏序CDQ+树状数组)
题目大意: 题面传送门 还是一道三维偏序题 每次操作都可以看成这样一个三元组 $<x,w,t>$ ,操作的位置,权值,修改时间 一开始的序列看成n次插入操作 我们先求出不删除时的逆序对总数 ...