{
开始、以}
结束,中间部分由 0 个或多个以英文,
分隔的 key/value 对构成,key 和 value 之间以英文:
分隔。对象结构的语法结构如下:
{
key1:value1,
key2:value2,
...
}
{
"pname":"张三",
"password":"123456",
"page":40
}
[
开始、以]
结束,中间部分由 0 个或多个以英文,
分隔的值的列表组成。数组结构的语法结构如下:
{
value1,
value2,
...
}
{
"sno":"201802228888",
"sname":"张三",
"hobby":["篮球","足球"],
"college":{
"cname":"清华大学",
"city":"北京"
}
}
<!-- fastjson --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency>
<mvc:annotation-driven> <!--配置@ResponseBody由fastjson解析 --> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="defaultCharset" value="UTF-8" /> </bean> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4" /> </mvc:message-converters> </mvc:annotation-driven> <mvc:default-servlet-handler /> <bean id="fastJsonpResponseBodyAdvice" class="com.alibaba.fastjson.support.spring.FastJsonpResponseBodyAdvice"> <constructor-arg> <list> <value>callback</value> <value>jsonp</value> </list> </constructor-arg> </bean> <!-- annotation-driven用于简化开发的配置,注解DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter --> <!-- 使用resources过滤掉不需要dispatcherservlet的资源(即静态资源,例如css、js、html、images)。 在使用resources时必须使用annotation-driven,否则resources元素会阻止任意控制器被调用 --> <!-- 允许js目录下的所有文件可见 --> <mvc:resources location="/" mapping="/**" />
package net.biancheng.po; public class User { private String name; private String password; private Integer age; /**省略setter和getter方法*/ }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>测试JSON交互</title> <script type="text/javaScript" src="${pageContext.request.contextPath }/js/jquery-3.2.1.min.js"></script> </head> <body> <form action=""> 用户名:<input type="text" name="name" id="name" /> <br> 密码:<input type="password" name="password" id="password" /> <br> 年龄:<input type="text" name="age" id="age"> <br> <input type="button" value="测试" onclick="testJson()" /> </form> </body> <script type="text/javaScript"> function testJson() { var name = $("#name").val(); var password = $("#password").val(); var age = $("#age").val(); $.ajax({ //请求路径 url : "${pageContext.request.contextPath}/testJson", //请求类型 type : "post", //data表示发送的数据 data : JSON.stringify({ name : name, password : password, age : age }), //定义发送请求的数据格式为JSON字符串 contentType : "application/json;charset=utf-8", //定义回调响应的数据格式为JSON字符串,该属性可以省略 dataType : "json", //成功响应的结果 success : function(data) { if (data != null) { alert("输入的用户名:" + data.name + ",密码:" + data.password + ", 年龄:" + data.age); } } }); } </script> </body> </html>由于在 index.jsp 中使用的是 JQuery 的 AJAX 进行的 JSON 的数据提交和响应,所以还需要引入 jquery.js 文件。这里我们引入的是 webapp 目录下的 js 文件夹中的 jquery-3.2.1.min.js。
/** * 接收页面请求的JSON参数,并返回JSON格式的结果 */ @RequestMapping("/testJson") @ResponseBody public User testJson(@RequestBody User user) { // 打印接收的 JSON数据 System.out.println("name=" + user.getName() + ",password=" + user.getPassword() + ",age=" + user.getAge()); // 返回JSON格式的响应 return user; }在上述控制器类中编写了接收和响应 JSON 格式数据的 testJson 方法,方法中的 @RequestBody 注解用于将前端请求体中的 JSON 格式数据绑定到形参 user 上,@ResponseBody 注解用于直接返回 Person 对象(当返回 POJO 对象时默认转换为 JSON 格式数据进行响应)。
index.jsp 页面
Eclipse 控制台输出信息如下。
name=lmcjl.com,password=123456,age=12
从运行结果可以看出,编写的代码可以将 JSON 格式的请求数据转换为方法中的 Java 对象,也可以将 Java 对象转换为 JSON 格式的响应数据。本文链接:http://task.lmcjl.com/news/13774.html