美文网首页
@Responsebady和@RequestBody的区别

@Responsebady和@RequestBody的区别

作者: 流年划破容颜_cc55 | 来源:发表于2018-08-01 15:16 被阅读41次

    RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

    @RequestMapping(value = "/aaa")//类级别,可以没有

    public class myController {

        @RequestMapping(value = "/bbb")//方法级别,必须有

      public String getMyName() {

            return "myReturn";

        }

    }

    用在方法上时,表示这个这个处理对应请求的方法,由MVC负责映射进来。

    可以这样理解,当你想吧整个方法中的相同的前缀请求抽离出来,就可以把相同的路径名字放到类上面。


    @Responsebody与@RequestBody

    @Responsebody表示该方法的返回结果直接写入HTTP response body中

    一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,

    加上@Responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。

    比如异步获取json数据,加上@Responsebody后,会直接返回json数据。

    @RequestBody一般用于在提交ajax时所带的请求参数插入到方法中。 简单的说就是帮你把提交的数据直接放到你定义的变量中。

    例如:

    function login() {//页面异步请求

        var mydata = '{"name":"' + $('#name').val() + '","id":"'

                + $('#id').val() + '","status":"' + $('#status').val() + '"}';

        $.ajax({

            type : 'POST',

            contentType : 'application/json',

            url : "${pageContext.request.contextPath}/person/login",

            processData : false,

            dataType : 'json',

            data : mydata,

            success : function(data) {

                alert("id: " + data.id + "\nname: " + data.name + "\nstatus: "

                        + data.status);

            },

            error : function() {

                alert('出错了!');

            }

        });

    };

        @RequestMapping(value = "person/login")

        @ResponseBody

        public Person login(@RequestBody Person person) {//将请求中的mydata写入Person对象中

            return person;//不会被解析为跳转路径,而是直接写入HTTP response body中因为我们加了                                  //@ResponseBody这个注解。

        }


    扩展:@PathVariable获取请求路径变量

    function profile() {

        var url = "${pageContext.request.contextPath}/person/profile/";

        var query = $('#id').val() + '/' + $('#name').val() + '/'

                + $('#status').val();

        url += query;

        $.get(url, function(data) {

            alert("id: " + data.id + "\nname: " + data.name + "\nstatus: "

                    + data.status);

        });

    }

        @RequestMapping(value = "person/profile/{id}/{name}/{status}")

        @ResponseBody

        public Person porfile(@PathVariable int id,@PathVariable String name,@PathVariable boolean status) {

            return new Person(id, name, status);

        }

      //@RequestMapping(value = "/person/profile/{id}/{name}/{status}")中的{id}/{name}/{status}与@PathVariable int id, @PathVariable String name,@PathVariable boolean status一一对应,按名匹配。

    相关文章

      网友评论

          本文标题:@Responsebady和@RequestBody的区别

          本文链接:https://www.haomeiwen.com/subject/gxhrvftx.html