背景

一般的接口后端如果使用 json 的格式传递,那么传递对象比较简单。

但是如果后端接口使用的是 formdata 形式,同时后端接口对象中又内嵌对象,应该如何处理呢?

说明

对象

我们使用FormData有时候不仅仅要传给后端文件,还需要传给后端对象信息。

使用FormData传对象是用key-value形式的,所以传对象不能传整个对象,要传属性

后端接口用对象接收即可,因为可以将传来的属性自动封装到实体类中(前端传来的属性名称和实体类

的属性名称一定要一致,否则无法封装)。

对象内嵌

还有当我们传的对象里面还有引用对象的时候,比如User类里面还有一个Depot类,我们就应该这样

formData.append(depot.id, this.formData.depot.id);

这样的话,就可以成功传给User类里的Depot类了

例子

后端

@PostMapping("/add")
public Result add(User user, MultipartFile image, HttpServletRequest request){
}

前端

注意看 depot.id 这个属性传递,会映射到后端 user 对象的内嵌对象 user.depot 中的 id 属性。

需要加一下双引号,避免出现 . 导致 js 的解析失败。

axios.post(url, {
	usename: '名称',
	age: 10,
	"depot.id": "内嵌对象标识",
	"depot.name": "内嵌对象名称"
}).then(function (response) {
    var res = response.data;
    if(res.success){
        obj.$message({
            type: 'success',
            message: '添加成功!'
        });
        vue.jump("user_list_page");
    }else {
        obj.$message.error({
            type: 'fail',
            message: res.msg
        });
    }
});

参考资料

https://blog.csdn.net/qq_42039738/article/details/106206935