axios异步提交表单数据的不一样形式

踩坑Axios提交form表单几种格式

先后端分离的开发先后端, 前端使用的vue,后端的安全模块使用的SpringSecurity,使用postman测试后端的权限接口时发现都正常,可是使用vue+axios发送异步的请求后端一直获取不出axios提交的form表单的数据,爬坑两个半钟头找到了答案前端

axios用post异步形式提交的数据和咱们直接使用from表单提交的数据的格式(Form Data格式)是不同的,在下面列举vue

默认格式Request Payload

直接使用axios发送异步请求,没任何处理的代码以下:ios

const service = axios.create({})

doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: pojo
    })

这种方式提交的表单格式是默认是RequestPayload, 它的长下面这个样子npm

能够看到,它的Contet-type是 "Content-Type": "application/json;"
可是后台的SpringSecurity对这种结果可不买单,在Request中解析不出任何数据来json

处理成Form Data格式

使用插件qs, 安装命令以下:axios

npm install --save qs

请求编码:后端

const service = axios.create({})

  doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
       data: qs.stringify(pojo)
    })
  }
  
  或者
  
  doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: pojo ,
       transformRequest: [function (data) {
        data = qs.stringify(data);
        return data;
      }],
    })
  }

通过这样处理的表单数据长成下面的这样, 这也是咱们最经常使用的Form Data格式,这种格式的数据能够从后台的HttpRequest中把提交的属性解析出来api


其余类型的Content-Type对应的表单数据格式

const service = axios.create({
  headers: {
      "Content-Type": "multipart/form-data;  charset=utf-8;"
      }
})

 doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: qs.stringify(pojo)
       })
  }

它长这样
安全


const service = axios.create({
  headers: {
      "Content-Type": "multipart/form-data;  charset=utf-8;"
      }
})

 doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: pojo
       })
  }
---

const service = axios.create({
  headers: {
      "Content-Type": "multipart/form-data;  charset=utf-8;"
      }
})

 doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data:pojo
       })
  }


const service = axios.create({
  headers: {
      "Content-Type": "application/x-www-form-urlencoded; charset=utf-8;"
  }
})

  doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: qs.stringify(pojo)
    })
  }

相关文章
相关标签/搜索