先讲把集合或者带有key,value键值对数据序列化成json。在spring mvc中其实会自动判断是否引入jackson,如果没有的话会加载json转化的消息转化器。
1,下面是转化为json类型的代码和配置
首先要导入3个jar包,我的用maven导入的,也可以直接下载jar包
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
spring的xml配置文件里添加:
<mvc:annotation-driven>
<mvc:message-converters>
<ref bean="stringHttpMessageConverter"/>
<ref bean="mappingJackson2HttpMessageConverter"/>
</mvc:message-converters>
</mvc:annotation-driven>
<!--定义消息转换器,响应或接受-->
<bean id="stringHttpMessageConverter"
class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean id="mappingJackson2HttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
在目标方法上:
//测试jackson
@RequestMapping(path = "/json")
@ResponseBody//实现序列化,转化为json数据
public List<user> jackson(user u) {
List<user> list1 = new ArrayList<user>();
list1.add(u);
list1.add(u);
list1.add(u);
//控制台测试打印输出
for (user l : list1) {
System.out.println(l.getSex() + " ," + l.getPwd() + "," + l.getName());
}
return list1;
}
pojo类中:
public class user {
private String name;
private int sex;
@JsonIgnore//不显示在页面,隐藏字段
private String pwd;
.......
}
页面输出结果:
[{“name”:“libai”,“sex”:1},{“name”:“libai”,“sex”:1},{“name”:“libai”,“sex”:1}]
2,反序列化json
首先要导入上面所说的两个jar包,xml里面配置也是一样,主要是页面传递数据格式要用json类型的,以及接收参数要用注解定义接收格式。
页面ajax代码:
<script>
$(function () {
// alert(123);
$("#sub").click(function () {
//alert("abc");
var name = $("#name").val();
var sex = $("#sex").val();
var pwd = $("#pwd").val();
//alert(pwd);
var v = {"name": name, "pwd": pwd, "sex": sex};
$.ajax({
url: 'requestbody'
, type: "POST"
, dataType: 'json'
//必须定义响应格式
, contentType: "application/json"
//必须定义转换json类型
, data: JSON.stringify(v)
, success: function () {
alert("success")
}
, error: function () {
alert("error")
}
})
});
})
</script>
页面表单:
<form onsubmit="return false" method="post">
name:<input type="text" name="name" id="name"><br>
sex:<input name="sex" id="sex"><br>
pwd:<input name="pwd" id="pwd"><br>
<input type="submit" value="get requestbody" id="sub">
</form>
后代代码:
//@RequestBody实现反序列化,user是定义的pojo类
@RequestMapping(path = "/requestbody")
public String requestBody(@RequestBody user us) {
System.out.println(us);
return "hello";
}
控制台输出结果:
user{name=‘yyt’, sex=1, pwd=‘123’}
在这里引入的jquery静态资源如果没有放行的话会无法实现ajax提交数据,要在xml中配置
<!--开启注释处理器-->
<mvc:annotation-driven/>
<!--开启默认servlet处理器,web.xml拦截的请求,spring mvc处理不了默认交给tomcat处理-->
<mvc:default-servlet-handler default-servlet-name="default"/>