// 配置请求头,允许上传文件。默认的Content-Type是 'application/json'
let config = {headers:{'Content-Type':'multipart/form-data'}}
let param=new FormData();
param.append("file",this.uploadFile);
//要携带的其它参数
param.append("username",this.username);
//FormData不能直接添加一个数组,只能逐个添加数组中的元素,append(key,value),key相同时会把value放在一个数组中
this.friendList.forEach(ele => {
param.append("friendList",ele);
});
// 向后端发起请求
this.$http
.post("/task/add", param, config) //参数、请求头配置
.then(resp => {
console.log(resp.data);
.catch(error => {
console.log(error);
});
- 参数是(url,param,config),url必需,param,config可选
- 支持get、post、put、delete、head等多种请求方式
如果用post,数据在请求体中,后端接收参数时要用 @RequestBody或@RequestParam 标注形参;但使用axios上传文件时,后端接收参数时不能用 @RequestBody、@RequestParam 标注形参。
有时候图方便,直接把其它组件或路由携带的整个对象赋给this.xxx,然后把整个this.xxx提交给后端,这种方式可能会提交一些多余的、没有值的字段,导致后端参数接收、转换出错。
比如后端实体有createTime这个Date类型的字段,本来不需要传这个字段,前端传了一个值为null或空串的createTime,后端解析参数会报错。
不传xx字段,和传了值是null或空串的这个字段,这是2个概念。不传这个字段,后端实体直接初始化这个字段为对应类型的初始值;传了一个值null的字段,后端转换参数容易出错。前端初始化要提交的字段时,慎用null,尽量用空串之类的,尽量只提交需要的字段。