注解@ResponseBody和@RequestBody

@RequestMapping("url"),这里的url是请求路径的一部分,一般作用在controller的方法上,作为请求的映射地址。

 

@ResponseBody是作用在方法上,它表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用【AJAX】,在使用@RequestMapping后,返回值通常解析为跳转路径,但是加上@ResponseBody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body 中。比如异步获取json数据,加上@ResponseBody后,会直接返回json数据,@RquestBody将HTTP请求正文插入方法中,使用适合的HttpMessageConverter将请求体写入某个对象。

举个例子:

function loginAction(){
   //获取用户输入的账号和密码
   var name=$("#name").val();
   var pwd=$("#pwd").val();
   $.ajax({
        url:"account/login",
        type:"post",
        data:{
            'name':name,
             'pwd':pwd
        },
        dataType:"json",
        success:function(res){
             if(res.data==0){
                  addCookie("userid",result.data.id);
                  addCookie("nick",result.data.nick);
                  location.href="edit.html";
             }else{
                  var msg=result.message;
                  $("#sig_in").next().html(msg);
               $("#sig_in").next().css("color","red");
             }
        },
        error:function(e){
             alert("异常");
        }
   });
   $("#pwd").val("");
}

后台controller中对应方法:

@RequestMapping("/login")
@ResponseBody
public Object login(String name,String pwd,HttpSession session){
    user=userServce.checkLogin(name,pwd);
    session.setAttribute("user",user);
    return new JsonResult(user);
}

@RequestBody

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

比如上面的登录方法可以改为:

@RequestMapping("/login")
@ResponseBody
public Object login(@RequestBody User loginUser,HttpSession session){
    user=userServce.checkLogin(loginUser);
    session.setAttribute("user",user);
    return new JsonResult(user);
}

 

posted @ 2019-03-15 09:53  不是一个世界的人  阅读(2133)  评论(0编辑  收藏  举报