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 ...
随机推荐
- Swift 字符串的分割
componentsSeparatedByString 就是根据 传递的 一个字符,进行字符串的一个分割 // 分割字符串 - > let sourceArray = source.compon ...
- ROS-OPENCV
前言:opencv是一个开源的跨平台计算机视觉库. 前提:1.已下载并编译了相关功能包集,如还未下载,可通过git下载:https://github.com/huchunxu/ros_explorin ...
- POJ 3628 01背包 OR 状压
思路: 1.01背包 先找到所有奶牛身高和与B的差. 然后做一次01背包即可 01背包的容积和价格就是奶牛们身高. 最后差值一减输出结果就大功告成啦! 2. 搜索 这思路很明了吧... 搜索的确可以过 ...
- Spark RDD概念学习系列之不同角度看RDD
不多说,直接上干货!
- git工具的安装和使用
啰嗦几句: 世界上本没有后悔药,但软件开发提供了后悔药,那就是代码管理工具.它可以让你的代码穿越回以前的状态,甚至可以指定某一个时刻,而且还可以穿越回来. 当下流行的代码管理工具有 SVN 和 GIT ...
- composer的一些操作
版本更新 命令行下:composer self-update 设置中国镜像 composer config -g repo.packagist composer https://packagist.p ...
- Cookie是存储在客户端上的一小段数据
背景 在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cookie规范定义了服务器和客户端交互信息的格式.生存期.使用范围.安全性. 在JavaSc ...
- Android中的事件分发机制
Android中的事件分发机制 作者:丁明祥 邮箱:2780087178@qq.com 这篇文章这周之内尽量写完 参考资料: Android事件分发机制完全解析,带你从源码的角度彻底理解(上) And ...
- AVL树,红黑树,B树,B+树,Trie树都分别应用在哪些现实场景中?
AVL树: 最早的平衡二叉树之一.应用相对其他数据结构比较少.windows对进程地址空间的管理用到了AVL树. 红黑树: 平衡二叉树,广泛用在C++的STL中.如map和set都是用红黑树实现的. ...
- echarts的下载为excel小工具
echarts自带有下载为图片的功能,但是没有下载为excel表格的功能,个人觉得下载为表格更为需要,所以写了个工具,此工具应用有局限性,只能用于柱形图和折线图,option的series要是如下形式 ...