注解@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); }