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 ...
随机推荐
- 压力测试工具 Tinyget
Tinyget 压力测试工具使用方法为:命令行切换到工具所在路径下,然后输入压力命令.如:tinyget -srv:localhost -uri:/FeaturedProdu1cts.aspx -th ...
- javascript中常用数组方法详细讲解
javascript中数组常用方法总结 1.join()方法: Array.join()方法将数组中所以元素都转化为字符串链接在一起,返回最后生成的字符串.也可以指定可选的字符串在生成的字符串中来分隔 ...
- (转载)Android项目实战(三十二):圆角对话框Dialog
Android项目实战(三十二):圆角对话框Dialog 前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话 ...
- LeetCode Golang 8. 字符串转换整数 (atoi)
8. 字符串转换整数 (atoi) 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组 ...
- 关于使用css伪类实现小图标
效果: .person_use>span{ display:block; width:0; height:0; border-width:10px; border-style:solid; bo ...
- arttemplate模板引擎里面多层循环
要使用支持原生js的插件: 代码截图: json数据 { "list": [ { "name": "学历层次", "item&qu ...
- Ubuntu14.0 + CUDA9.0 + cudnn7.0 + TensorFlow-gpu1.7.0
在安装好nvidia驱动的基础上安装 CUDA9.0 + cudnn7.0 + TensorFlow-gpu1.7.0 这三个是匹配的版本 别的匹配(CUDA8.0 + cudnn6.0 + Tens ...
- python之类的组合
类的组合 学校与课程没有共同点,课程与老师没有共同点,但是学校与课程有关联,课程与老师有关联:学校.课程.老师是三个完全不同的类:课程是属于学校的,老师是教课程的,此时我们就用到类的组合来关联,学校- ...
- [USACO18JAN] MooTube (离线并查集)
题目大意:给你一棵边权树,定义两点间距离为它们唯一路径上的最小路权,求与某点距离不大于K(k为已知)的点的数量 带权并查集维护集合内元素总数 路和问题 都按权值大到小排序,枚举问题, 建权值不小于K的 ...
- [luogu3369] 普通平衡树(splay模板)
题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1.插入 xx 数 2.删除 xx 数(若有多个相同的数,因只删除一个) 3.查询 xx 数的排名(排名定义为比 ...