在JAVAEE开发中少不了和JSON打交道,如果不清楚java的json操作的话,请看这一篇JAVA中的四种JSON解析方式详解。而我们现在说的是SpringMVC对JSON的支持,默认使用的是jackson方式。
这里就涉及到2个注解的使用:
@ResponseBody
将对象转换为指定格式的内容
注意:
1、使用在方法上
方法的返回值应该就为对象(集合、自定义类对象等)
2、默认都是json
3、配置jackson操作JSON的jar包
4、将返回的对象转换为字符串
5、主动设置Content-Type
@RequestBody
将json格式字符串转换为对象,method=RequestMethod.POST
注意:
1、使用在方法的形式参数上
2、参数就是解析的结果
3、如果传输的参数为JSON,那么只能进行POST请求
4、必须设置contentType
application/json
jackson最新版jar包jsacson2.9jar包 最新版
看看使用
底层类:
public class User {
private int id;
private String name;
private String pass;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", pass=" + pass + "]";
}
public User(int id, String name, String pass) {
super();
this.id = id;
this.name = name;
this.pass = pass;
}
public User() {
super();
}
}
控制器:
@Controller
public class IserController {
//只能将请求的JSON对象自动解析为指定的对象
@RequestMapping(value="/addUser",method=RequestMethod.POST)
public void test1(@RequestBody User user,HttpServletResponse response ) throws IOException{
System.out.println(user);
response.getWriter().println("OK");
}
页面的Ajax请求
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加用户</title>
<script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
$(function(){
$("#btn1").click(function () {
//ajax实现json数据的传输
$.ajax({
url:"addUser",
type:"post",
contentType:"application/json",
dataType:"json",
data:"{\"id\":1,\"name\":\"张三\",\"pass\":\"123456\"}",
sucess:function(data){
alert(data);
},
error:function(e){
console.log(e);
}
});
});
});
</script>
</head>
<body>
<h1>添加用户</h1>
<input id="btn1" type="button" value="添加用户"/>
</body>
</html>
下面看看@ResponseBody的使用
底层类:
public class Book {
private String no;
private String name;
private double price;
private String press;//出版社
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
public Book(String no, String name, double price, String press) {
super();
this.no = no;
this.name = name;
this.price = price;
this.press = press;
}
public Book() {
super();
}
}
控制器:
@Controller
public class BookController {
//返回的json数组
@ResponseBody
@RequestMapping("/getBooksByJson")
public ArrayList<Book> test2(){
ArrayList<Book> list=new ArrayList<>();
Random random=new Random();
int size=random.nextInt(10);
for(int i=1;i<size;i++){
list.add(new Book("10000"+i,"钢铁是怎么样炼成的", random.nextInt(100), "人民出版社"));
}
return list;
}
}
页面:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>我的藏书</title>
<script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
$(function(){
//使用注解方式JSON字符串--@ResponseBody
$("#btn2").click(function(){
$.ajax(
{
url:"getBooksByJson",
type:"get",
success:function(data){
console.log(data);//显示到浏览器的控制台
showData(data);
},
error:function(e){
console.log(e);//显示到浏览器的控制台
}
});
});
});
//显示数据到页面
function showData(data) {
var table=document.getElementById("t1");
for(var i=0;i<data.length;i++){
/* $("#t1").append("<tr></tr>"); */
var tr=document.createElement("tr");
var td1=document.createElement("td");
td1.innerHTML=data[i].no;
tr.appendChild(td1);
var td2=document.createElement("td");
td2.innerHTML=data[i].name;
tr.appendChild(td2);
var td3=document.createElement("td");
td3.innerHTML=data[i].press;
tr.appendChild(td3);
var td4=document.createElement("td");
td4.innerHTML=data[i].price;
tr.appendChild(td4);
table.appendChild(tr);
}
}
</script>
</head>
<body>
<h1>我的藏书列表</h1>
<h1><input type="button" value="获取藏书" id="btn2"></h1></h1>
<table id="t1">
<tr>
<th>编号</th>
<th>书名</th>
<th>出版社</th>
<th>价格</th>
</tr>
</table>
</body>
</html>