@Responsebady和@RequestBody的区别

2018-08-01  本文已影响41人  流年划破容颜_cc55

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一一对应,按名匹配。

上一篇下一篇

猜你喜欢

热点阅读