ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

21.@RequestBody和@ResponseBody

2022-05-08 22:33:27  阅读:159  来源: 互联网

标签:21 Person RequestBody ResponseBody json book new data 请求


1.@ResponseBody
1.@ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中一般在异步获取数据时使用【也就是AJAX】
2.在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中
3.比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据
    测试代码:
        @ResponseBody---->方法上添加该标签,结果不会进行路径拼串和跳转,一般用于ajax获取返回的json报文,会自动的将返回对象格式化为json对象,前提是导入jackson的包!
        @RequestMapping("/getPersonList")
        public List<Person> getpersonList(Book book){
            System.out.println("请求体:"+book);
            Person P1=new Person("吴孟达",18,new Book("西游记",18.0,"吴承恩"));
            Person P2=new Person("吴孟达",18,new Book("西游记",18.0,"吴承恩"));
            Person P3=new Person("吴孟达",18,new Book("西游记",18.0,"吴承恩"));
            Person P4=new Person("吴孟达",18,new Book("西游记",18.0,"吴承恩"));
            List<Person> list=new ArrayList<>();
            list.add(P1);
            list.add(P2);
            list.add(P3);
            list.add(P4);
            return list;
        }
    jackson的pom文件如下
         <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.5.0</version>
        </dependency>

 

2.@RequestBody
@RequestBody是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,
封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上

测试代码如下:
    1.传入的是json对象
        前端代码如:
            $(function () {
                $("#button").click(function () {
                    var emp = {bookName: "西游记", price: 12.3, autor: "吴承恩"}
                    $.ajax({
                        url: "/getPersonList",
                        data: emp,----------->此处传入的是json对象,后台代码参数上不用加@RequestBody也可以正常获取到请求参数并格式化为javabean
                        type:"post",--------->无论get/post请求都可以,ajax默认是get请求
                        success: function (data) {
                            console.log(data)
                        }
                    })
                })
            })
        后端代码如下:
                @RequestMapping("/getPersonList")
                public List<Person> getpersonList(Book book){
                    System.out.println("请求体:"+book);
                }
    
    2.传入的是json字符串:
        $("#button").click(function () {
                var emp = {bookName: "西游记", price: 12.3, autor: "吴承恩"}
                var requestJson = JSON.stringify(emp);------>将json对象格式化为json字符串
                $.ajax({
                    url: "/getPersonList",
                    data: emp,
                    type:"get",
                    contentType:"application/json",--------->必须加上这行,否则后台会报解析错误
                    success: function (data) {
                        console.log(data)
                    }
                })
            })
        后台代码如下:
            @RequestMapping("/getPersonList")
            public List<Person> getpersonList(@RequestBody Book book){-->参数上加上@RequestBody,会将前台传来的json字符串自动格式化为javabean
                System.out.println("请求体:"+book);
            }

 

3.HttpEntity可以获取请求体外,还可以获取到请求头中的所有消息
用法:
    前端:
        $("#button").click(function () {
            var emp = {bookName: "西游记", price: 12.3, autor: "吴承恩"}
            var requestJson = JSON.stringify(emp);
            $.ajax({
                url: "/getPersonList",
                data: requestJson,--------->这里必须是json字符串
                type:"post",--------------->必须是post请求
                contentType:"application/json",--->加上这句
                success: function (data) {
                    console.log(data)
                }
            })
        })
    后台:
        @RequestMapping("/getPersonList")
            public List<Person> getpersonList(HttpEntity<Book> book){
                System.out.println("请求体:"+book);
            }
            
    之前如果要获取请求头信息必须:public List<Person> getpersonList(@RequestHeader("Content-Type")String ContentType ){....}
    输出结果是:发现出了前台传的参数外还又全部的请求头信息,
        请求体:<Book{bookName='西游记', price=12.3, autor='吴承恩'},
        {host=[localhost:8080], connection=[keep-alive], content-length=[57], pragma=[no-cache], cache-control=[no-cache], accept=[*/*],
         x-requested-with=[XMLHttpRequest], user-agent=[Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36],
         origin=[http://localhost:8080], sec-fetch-site=[same-origin], sec-fetch-mode=[cors], sec-fetch-dest=[empty], referer=[http://localhost:8080/form.jsp], 
         accept-encoding=[gzip, deflate, br], accept-language=[zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7], cookie=[JSESSIONID=54BB0D8A42382EF2051979FDC7F59D61], 
         Content-Type=[application/json;charset=UTF-8]}>

标签:21,Person,RequestBody,ResponseBody,json,book,new,data,请求
来源: https://www.cnblogs.com/wmd-l/p/16247267.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有