zoukankan      html  css  js  c++  java
  • Ajax请求

    今天使用jquery的ajax意外的发现一个问题,如果ajax请求不指定ContentType的话,它默认的请求类型就是Content-Type: application/x-www-form-urlencoded; charset=UTF-8,它和form表单的请求方式一致,后台可以通过java bean对象来直接映射

    $.post('/demo', {
        username: '大哥哥',
    }, function (res) {
        console.log(res)
    })
    
    @RequestMapping("/demo")
    @ResponseBody
    public String demo(User user) {
        System.out.println(user);
        return "发噶嘎嘎";
    }
    

    输出结果:

    如果User类的结构是这样的:


    可以很清楚的看到,User类中有一个Classs类的引用,如果ajax请求需要将User对象的参数发送给后台,并将classs属性中的属性也一并传值给后台,那么像上面的写法就不能满足当前业务逻辑的需求了。

    • 首先,前台的ajax请求需要指定ContentType这个属性,这样就不能使用
      $.get()或者$.post()了,因为它们不能自定义请求参数,解决办法:
    $.ajax({
        url: '/demo',
        method: 'post',
        // 指定contentType和JSON.stringify()序列化数据是必须要做的,这很重要
        contentType: 'application/json;charset=utf-8',
        data: JSON.stringify({
            username: '大哥哥',
            // classs属性是Class类在User类中的引用属性
            classs: {
                // Class的属性
                classname: '32:10班'
            }
        }),
        success: function (res) {
            console.log(res)
        }
    })
    

    后台代码:

    @RequestMapping("/demo")
    @ResponseBody
    // 加上@RequestBody这个参数后,参数栏就只能接收user这一个参数了,spring mvc会将前台传过来的所有数据都序列化成User对象,给里面的属性附好值
    public String demo(@RequestBody User user, HttpServletRequest request) {
        System.out.println(user);
        System.out.println(request.getHeader("Content-Type"));
        return "发噶嘎嘎";
    }
    

    输出结果:

    注:@RequestBody只能在请求为json格式的时候才能使用

    需要设置contentTypejson格式、将传递数据用JSON.stringify()转成字符串、Spring Mvc需要在参数前加@RequestBody的情况:

    • 只要需要传递一个对象,并将这个对象中的对象也传值到后台去
    • 传递的是一个数组

    传递数组的问题在我的上一篇博客中已经讲到:数组问题解决

    除了以上情况,就算是后台需要映射多个对象的时候,也可以用平常的方法解决
    比如:username给User赋值,classname给Classs赋值

    $.post('/demo', {
        username: '大哥哥',
        classname: '32:10班'
    }, function (res) {
        console.log(res)
    })
    

    后台代码:

    @RequestMapping("/demo")
    @ResponseBody
    public String demo(User user, Classs classs, HttpServletRequest request) {
        System.out.println(user);
        System.out.println(classs);
        System.out.println(request.getHeader("Content-Type"));
        return "发噶嘎嘎";
    }
    

    输出结果:

  • 相关阅读:
    SpringBoot中并发定时任务的实现、动态定时任务的实现(看这一篇就够了)
    压力测试
    AlertManger的详细配置
    http://www.linuxe.cn/post-518.html
    https://helpcdn.aliyun.com/knowledge_detail/194196.html
    AIOPS智能监控团队
    普罗新修斯监控mysql数据库1
    干货 | Elasticsearch集群黄色原因的终极探秘
    elasticsearch集群在生产上面必看的优化文章
    干货丨DolphinDB与Elasticserach在金融数据集上的性能对比测试
  • 原文地址:https://www.cnblogs.com/dagger9527/p/11836607.html
Copyright © 2011-2022 走看看