一、JSON
1、JSON 简介
2、JSON 语法
1 | { "name" : "John Doe" , "age" : 18, "address" : { "country" : "china" , "zip-code" : "10000" }} |
3、JSON 与 JS 对象的关系
JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
1 2 3 | var obj = {a: 'Hello' , b: 'World' }; //这是一个对象,注意键名也是可以使用引号包裹的 var json = '{"a": "Hello", "b": "World"}' ; //这是一个 JSON 字符串,本质是一个字符串 |
4、JSON 和 JS 对象互转
要实现从 JSON 字符串转换到 JS 对象,使用 JSON.parse() 方法
1 | var obj = JSON.parse( '{"a": "Hello", "b": "World"}' ); //结果是 {a: 'Hello', b: 'World'} |
要实现从 JS 对象转换到 JSON 字符串,使用 JSON.stringify() 方法
1 | var json = JSON.stringify({a: 'Hello' , b: 'World' }); //结果是 '{"a": "Hello", "b": "World"}' |
5、JSON 的常用类型
6、与 Java 对象转换
二、SpringMVC支持Ajax
1、处理 JSON 格式数据
(1)导入jar 包
jackson-annotations-2.1.5.jar
jackson-core-2.1.5.jar
jackson-databind-2.1.5.jar
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
(2)配置文件
在 SpringMVC 配置文件中加入 MVC 驱动标签
<!-- mvc驱动 -->
<mvc:annotation-driven />
2、使用@ResponseBody注解
在处理请求的方法上加上 注解 @ResponseBody,将要转换为 JSON 且响应到客户端的数据,直接作为该方法的返回值返回。
/**
* springMVC处理json的四个条件:
* 1、导入jackson的jar
* 2、在 springMVC 的配置文件中开启 MVC 驱动 <mvc:annotation-driven />
* 3、在处理 ajax 请求的方法上加上注解 @ResponseBody (springMVC 对 JSON 的支持)
* 4、将要转换为 json 且响应到客户端的数据,直接作为该方法的返回值返回
* @return
*/
@RequestMapping(value="/getAllEmps")
@ResponseBody()
public Collection<Employee> ajaxGetAll() {
Collection<Employee> emps = employeeDao.getAll();
return emps;
}
3、案例
从页面发起 Ajax 请求:
<a id="getEmps" href="${ctp}/getAllEmps">Ajax获取员工信息</a>
<div id="content"></div>
<script>
$("#getEmps").click(function () {
//发送ajax请求
$.ajax({
url : "${ctp}/getAllEmps",
contentType : "text/json",
type : "GET",
success : function (data) {
console.log(data);
$("#content").empty();
$.each(data, function() {
var empInfo = this.lastName + "-->" + this.birth + "-->" + this.gender;
$("#content").append(empInfo + "<br/>");
});
},
error : function (data) {
console.log("请求出错");
}
});
//禁用默认行为
return false;
});
</script>
控制器返回 JSON 数据:
@ResponseBody
@RequestMapping(value = "/getAllEmps")
public Collection<Employee> ajaxGetAll() {
Collection<Employee> emps = employeeDao.getAll();
return emps;
}
4、使用 Jackson 的相关注解
Jackson 的 包中同时提供了一些相关注解,可以做更多的操作:
可以使用 @JsonIgnore 来忽略某一个属性,使用 @JsonFormat 来格式化属性,直接加载 JavaBean 的相关属性上面就可以了。
示例:
@JsonFormat(pattern = "yyyy-MM-dd")
private Date birth = new Date();
@JsonIgnore
private Department department;
三、@RequestBody 与 @ResponseBody
1、@RequestBody
@RequestBody 用于获取请求体中的内容
示例:
表单提交:
<form action="${ctp}/testRequestBody" method="post" enctype="multipart/form-data">
<input name="username" value="tomcat" />
<input name="password" value="123456" />
<input name="file" type="file">
<input type="submit" />
</form>
获取请求体内容:
/**
* @RequestBody:请求体,获取一个请求的请求体
* @RequestParam:从请求中获取请求参数的值
* @return
*/
@RequestMapping(value = "/testRequestBody")
public String testRequestBody(@RequestBody String body) {
System.out.println("请求体:" + body);
return "success";
}
注意:POST 方式的提交才会有请求体,GET 方式的提交参数都在地址栏。
2、@ResponseBody
@ResponseBody:将返回的数据放在响应体中。
3、Ajax 发送 JSON 数据
可以通过 Ajax 向服务器发送 JSON 数据:
页面提交:
<a id="saveEmp" href="${ctp}/testRequestBodyEmp">发送Emp的JSON数据</a>
<script type="text/javascript">
$("#saveEmp").click(function () {
var emp = {
lastName : "Tom",
email : "Tom@126.com",
gender : "1",
birth : new Date(),
salary : "3000"
};
var empStr = JSON.stringify(emp);
alert(empStr);
alert(typeof empStr);
//发送 ajax 请求,请求带的数据是 json
$.ajax({
url : "${ctp}/testRequestBodyEmp",
type : "POST",
data : JSON.stringify(emp),
contentType : "application/json",
success : function (data) {
alert(data);
},
error : function (data) {
alert("请求出错");
}
});
return false;
});
</script>
控制器方法:
/**
* @ResponseBody 可以把对象转为json数据,返回给浏览器
*
* @RequestBody 接收 json 数据,封装为入参对象
*
* @param emp
* @return
*/
@RequestMapping(value = "/testRequestBodyEmp")
public String testRequestBodyEmp(@RequestBody Employee emp) {
System.out.println("请求体= " + emp);
return "success";
}
使用了 @RequestBody 会把提交的 JSON 数据封装为入参对象。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· 面试官:你是如何进行SQL调优的?