前端提交复杂对象,例如:{name:'aaa',age:20,list:[{…………}]}。
前端axios处理:
- 设置axios请求参数设置 Content-Type = application/json;charset=UTF-8
export function save(data) { return request({ url: url, method: 'post', dataType: 'json', // 自己定义的参数,请求拦截时判断是否序列化 // 用dataType判断,在请求拦截里加header也可以 headers: { 'Content-Type': 'application/json;charset=UTF-8' }, data }) }
- 注意axios请求拦截不要用qs或其他方式进行序列化,
axios默认以application / x-www-form-urlencoded格式发送数据,所以需要将JavaScript对象序列化为JSON。但是application/json方式不需要序列化,否则接受不到数据。
一般情况element UI等会封装axios,会把data进行序列化,所以要处理一下。例如
service.interceptors.request.use(
config => {
// do something before request is sent
if (store.getters.token) {
config.headers['Authorization'] = 'Bearer ' + getToken()
}
// 传参转为json
if(config.dataType === 'json'){
config.headers['Content-Type'] = 'application/json;charset=UTF-8'
}else if (config.data) {
// 序列化参数,传json不要序列化
config.data = Qs.stringify(config.data, {
serializeDate: (date) => {
return moment(date).format('YYYY-MM-DD HH:mm:ss')
}
})
}
// console.log('请求:', config.data) // for debug
return config
},
error => {
// do something with request error
console.log(error) // for debug
return Promise.reject(error)
}
)
后端Spring MVC处理:
// 接json需要@RequestBody注解
// Query实体与json格式保持一致,SpringMVC自动转换
@PostMapping(value="/save")
public ResponseResult save(@RequestBody Query query){
return success();
}