先提一嘴 @RequestMapping(“url”),这里的 url写的是请求路径的一部分,通常做用在 Controller的方法上,做为请求的映射地址。css
代码:html
@RequestMapping(value = "/test")//类级别映射,能够没有,通常用于减小书写量 public class myController {//方法级别映射,必须有,那么这个方法的访问地址就是/test/aaa,请求到的页面就是test.jsp【固然,这里的.jsp须要在配置文件中配置】 @RequestMapping(value = "/aaa") public String getMyName() { return "test"; } }
那么 @ResponseBody呢?ajax
@ResponseBody是做用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,通常在异步获取数据时使用【也就是AJAX】,在使用 @RequestMapping后,返回值一般解析为跳转路径,可是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 好比异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。 @RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。
举个例子:json
前台异步请求:function loginAction() { // 获取用户输入的帐号和密码 var name = $('#count').val(); var password = $('#password').val(); $.ajax({ url : 'account/login.do', type : 'post', // data对象中的属性名要和服务端控制器的参数名一致 login(name, password) data : { 'name' : name, 'password' : password }, dataType : 'json', success : function(result) { if (result.state == 0) { // 登陆成功,设置cookie并跳转edit.html 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("系统异常"); } }); $('#password').val(""); }后台 Controller类中对应的方法:cookie
@RequestMapping("/login.do") @ResponseBody public Object login(String name, String password, HttpSession session) { user = userService.checkLogin(name, password); session.setAttribute("user", user); return new JsonResult(user); }
@RequestBody呢?session
@RequestBody是做用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,而后封装到形参上。app
好比上面的登陆后台代码能够改成:异步
@RequestMapping("/login.do") @ResponseBody public Object login(@RequestBody User loginUuser, HttpSession session) { user = userService.checkLogin(loginUser); session.setAttribute("user", user); return new JsonResult(user); }