SpingMVC4.3x教程之四@RequestBody和@ResponseBody

在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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值