所谓的对JSON的支持,就是SpringMVC支持自动将JSON转换成JAVA对象,也支持将Java对象自动转成JSON.
SpringMVC本身没有对JSON数据处理的类库.要支持JSON的自动转换必须导入JSON的支持包
请 求发送一个JSON字符串给执行方法,执行方法根据@RequestBody这个注解强制将
请求发送过来的JSON转换成Java对象
如果前端发送的不是JSON字符串则不能使用@RequestBody
页面以JSON字符串传递方式:
"{\"username\": \"xiaodong\", \"address\": \"guangzhou\", \"birthday\": \"2000-10-10\"}"
Jackson依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
使用@ResponseBody如果返回的是一个Java对象,那么springmvc会帮我们自动转成json对象写入到前端
并且把响应头(Content-Type)设置为application/json;charset=utf8
,但是如果直接返回一个字符串,那么@ResponseBody
会以普通文本方式写入到前端Content-Type还是默认的text/plain;charset=ISO-8859-1
就会造成中文乱码现象
@produces :设置响应的类型(Content-Type)
@consumes:规定请求的类型(Content-Type)
@RequestMapping(value = "xxx/{参数}/{参数}",method= RequestMethod.GET,produces = "text/html;charset=utf-8")
@ResponseBody
Ajax 前端请求格式
<!-- 发送ajax请求
前端传值到后台:
1.自动映射
key:value结构即可
提交数据默认格式:application/x-www-form-urlencoded
2.强制映射
-->
$.ajax({
url:"/mvc/ajax3.mvc",//连接地址
data:{"username":"张无忌","password":"123"},//请求参数
method:"get",//请求方法
//contentType:"application/json,//告诉浏览器 当前请求数据格式是 json字符串
success:function(obj){//后台响应后返回的数据
console.log(obj.username);
}
})
控制层
@RequestMapping("ajax3.mvc")
@ResponseBody
public User ajax1(User user){
System.out.println(user);
return user;
}