zoukankan      html  css  js  c++  java
  • @ResponseBody 和 @RequestBody 的作用

    先提一嘴 @RequestMapping(“url”),这里的 url写的是请求路径的一部分,一般作用在 Controller的方法上,作为请求的映射地址。

    代码:

    复制代码
    @RequestMapping(value = "/test")//类级别映射,可以没有,一般用于减少书写量
    public class myController {
        //方法级别映射,必须有,那么这个方法的访问地址就是/test/aaa,请求到的页面就是test.jsp【当然,这里的.jsp需要在配置文件中配置】
        @RequestMapping(value = "/aaa")
        public String getMyName() {
            return "test";
        }
    }
    复制代码

    那么 @ResponseBody呢?

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

    举个例子:

    前台异步请求:
    复制代码
    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类中对应的方法:

    复制代码
        @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呢?

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

    比如上面的登录后台代码可以改为:

    复制代码
        @RequestMapping("/login.do")
        @ResponseBody
        public Object login(@RequestBody User loginUuser, HttpSession session) {
            user = userService.checkLogin(loginUser);
            session.setAttribute("user", user);
            return new JsonResult(user);
        }
    复制代码
  • 相关阅读:
    使用 asp.net mvc和 jQuery UI 控件包
    ServiceStack.Redis 使用教程
    HTC T8878刷机手册
    Entity Framework CodeFirst 文章汇集
    2011年Mono发展历程
    日志管理实用程序LogExpert
    使用 NuGet 管理项目库
    WCF 4.0路由服务Routing Service
    精进不休 .NET 4.0 (1) asp.net 4.0 新特性之web.config的改进, ViewStateMode, ClientIDMode, EnablePersistedSelection, 控件的其它一些改进
    精进不休 .NET 4.0 (7) ADO.NET Entity Framework 4.0 新特性
  • 原文地址:https://www.cnblogs.com/xiaoliu66007/p/10045363.html
Copyright © 2011-2022 走看看