后端接收对象的两种方式

1. vue 发送ajax请求传递对象:

<script>
	import {
		addUser,
		updateUser,
		delUser
	} from "@/api/table.js"
	export default {
		data() {
			return {

				//新增弹出框
				dialog: false,
				//表单
				form: {
					id: '',
					name: '',
					sex: '',
					age: '',
					phone: '',
					adress: '',
				},
				//查看 || 修改标识
				logo: "",
				//表单是否禁用
				formDisabled: false,
			}
		},
		methods: {
			// 保存
			save(form) {

				if (this.logo == "add") {

					this.$refs[form].validate((valid) => {
						if (valid) {
							addUser(this.form).then(response => {
								

								//关闭弹框
								this.dialog = false;
								//调用查询方法
								this.$emit("getAllUsers");
								
							})
						} else {
							this.$message({
								type: 'error',
								message: '校验失败',
							});
						}
					});

				} else if (this.logo == "update") {

					this.$confirm('您确定要修改此条数据 ?', '提示', {
						confirmButtonText: '确定',
						cancelButtonText: '取消',
						type: 'warning'
					}).then(() => {
						
						this.$refs[form].validate((valid) => {
							if (valid) {
								updateUser(this.form).then(response => {
									
									//关闭弹框
									this.dialog = false;
									//调用查询方法
									this.$emit("getAllUsers");
									
								})
							} else {
								this.$message({
									type: 'error',
									message: '校验失败',
								});
							}
						});

					}).catch(() => {
						this.$message({
							type: 'info',
							message: '已取消修改'
						});
					});


				}

			},
		},
		
	}
</script>

2. table.js 请求后端地址

import request from '@/utils/request'
import qs from 'qs'

//修改用户信息 
export function updateUser(params){
	return request({
	  url: '/user/updateUser',
	  method: 'post',
	  // qs.stringify : 将对象序列化成url的形式,以&方式进行拼接
	  data: qs.stringify({
	    // JSON.stringify: 将javascript值转换成json字符串
	  	bean: JSON.stringify(params)
	  })
	})
}

3. 后端Controller层接收对象的两种方式

1. 第一种方式

 /*
     * 功能描述: DOTO 修改用户信息
     * @Param: [user]
     * @Date: 2020/9/10 17:38
     */
    @RequestMapping(value = "/updateUser",method = RequestMethod.POST)
    public Map<String,Object> updateUser(HttpServletRequest request){

        Map<String,Object> resultMap  = new HashMap<>();
        try {

            String bean = request.getParameter("bean");

            User user = null;
            if(null != bean && !"".equals(bean)){
                //将java对象转换成json对象
                JSONObject JsonObjectBean = JSONObject.fromObject(bean);
                //JSON对象转换成Java对象的两种方式
                // 1:第一种 
                user = (User)JSONObject.toBean(JsonObjectBean,User.class);
                // 2:第二种
                JsonConfig jsonConfig = new JsonConfig();
                jsonConfig.setRootClass(User.class);
                user = (User) JSONSerializer.toJava(JsonObjectBean,jsonConfig);

				 //JSONArray转换为List的两种方法:
		         /*
		        JSONArray userArray = JSONArray.fromObject("[" + json.toString() + "]");
                List userList1 = (List) JSONArray.toCollection(userArray, User.class);
                List userList2 = (List) JSONSerializer.toJava(userArray, jsonConfig);
                */
            }
			//调用service层修改数据
            int resultData = userService.updateUser(user);
            ReturnUtil.createSuccess(resultMap,resultData, CommonRest.UPDATE_SUCCESS);
        } catch (Exception e) {
            log.error(e.getMessage(),e);
            ReturnUtil.createError(resultMap,CommonRest.UPDATE_FAILD);
        }
        return resultMap ;
    }

2. 第二种方式

 @RequestMapping(value = "/updateUser",method = RequestMethod.POST)
public Map<String,Object> updateUser(@RequestBody User user){
	//通过注解@RequestBody接收 Requset payloa 里的参数
}

4. 遍历参数时会报错: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to

// 解决方案如下
Object object = expressList.get("exList");
JSONArray jsonObject = JSONArray.fromObject(object);
List<ExpressEmployeeInfoExt2> list2 = (List<ExpressEmployeeInfoExt2>) JSONArray.toCollection(jsonObject, ExpressEmployeeInfoExt2.class);

你可能感兴趣的:(java,spring,vue.js)