荼司菱 2025-09-27 17:18 采纳率: 50%
浏览 5
已结题

前端调试数据存在,后端使用postman测试也没问题,两个一起测就出错

前端调试数据存在,后端使用postman测试也问题数据也能修改,两个一起测就出错,然后后端显示的是数据为 null,自己测了了老半天还是没发解决,希望各位指点迷津


<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
        <title>修改</title>
        <link rel="stylesheet" href="../../lib/element-ui/theme-chalk/index.css">
        <link rel="stylesheet" href="../../lib/vxe-table/index.css">
        <link rel="stylesheet" href="../../lib/vxe-table-plugin-element/style.css">
        <link rel="stylesheet" href="../../lib/font-awesome/css/font-awesome.min.css">
        <link rel="stylesheet" href="../../static/css/skins.css">
        <script type="text/javascript" src="../../lib/vue/vue.js"></script>
        <script type="text/javascript" src="../../lib/xe-utils/xe-utils.js"></script>
        <script type="text/javascript" src="../../lib/element-ui/index.js"></script>
        <script type="text/javascript" src="../../lib/vxe-table/index.js"></script>
        <script type="text/javascript" src="../../lib/vxe-table-plugin-element/index.js"></script>
        <script type="text/javascript" src="../../lib/xlsx/xlsx.full.min.js"></script>
        <script type="text/javascript" src="../../lib/vxe-table-plugin-export-xlsx/index.min.js"></script>
        <script type="text/javascript" src="../../lib/xe-ajax/xe-ajax.js"></script>
        <script type="text/javascript" src="../../static/js/jquery.min.js"></script>
        <script type="text/javascript" src="../../static/js/SM2/crypto-js.js"></script>
        <script type="text/javascript" src="../../static/js/SM2/sm2.js"></script>
        <script type="text/javascript" src="../../static/js/webApi.js"></script>
        <script type="text/javascript" src="../../static/js/tool.js"></script>
        <script type="text/javascript" src="../../static/js/skinchange.js"></script>
        <style type="text/css">
            /*
                找到html标签、body标签,和挂载的标签
                都给他们统一设置样式
            */
            html,
            body,
            #app,
            .el-container {
                /*设置内部填充为0,几个布局元素之间没有间距*/
                padding: 0px;
                /*外部间距也是如此设置*/
                margin: 0px;
                /*统一设置高度为100%*/
                height: 100%;
            }

            .el-main {
                padding: 4px;
            }

            [v-cloak] {
                display: none;
            }

            .model_title {
                color: red;
                font-size: 16px;
                /* text-align: center; */
            }

            .flex-container {
                display: -webkit-flex;
                display: flex;
                -webkit-flex-wrap: wrap;
                flex-wrap: wrap;
                width: 100%;
                height: 100%;
            }

            .flex-item {
                background-color: #F5F5F5;
                width: 150px;
                height: 50px;
                margin: 10px 10px 10px 0;
                text-align: center;
                /* padding: 5px; */
            }

            .file_div {
                position: relative;
                width: 150px;
                height: 50px;
            }

            .mask {
                position: absolute;
                top: 0;
                left: 0;
                width: 150px;
                height: 50px;
                background: rgba(101, 101, 101, 0.6);
                color: #ffffff;
                opacity: 0;
            }

            .mask i {
                line-height: 50px;
                text-align: right;
                margin: 0 5px;
            }

            .file_div a:hover .mask {
                opacity: 1;
            }
        </style>
    </head>
    <body class="skin-blue">
        <el-container id="app">
            <el-form ref="form1" :model="form" label-width="150px">
                <el-form-item label="主键" prop="id" required>
                    <el-input v-model="form.id"></el-input>
                </el-form-item>
                <el-form-item label="争议调整情况" prop="zytzqk">
                    <el-input v-model="form.zytzqk" :style="{background: '#f5f7fa'}"></el-input>
                </el-form-item>
                
                <!-- 其他字段保持不变... -->

                <el-form-item style="text-align: right;">
                    <el-button @click="quxiao()">取 消</el-button>
                    <el-button type="primary" @click="onSubmit('form1')">确 定</el-button>
                </el-form-item>
            </el-form>

    

    <script type="text/javascript">
        window.onload = function() {
            var main = {
                data() {
                    return {
                        dialogVisible: true,
                        showImportModel: false,
                        headers: {
                            token: ''
                        },
                        form: {
                                           id:'',
                                                  time: '',
                                                  year: '',
                                                  yys: '',
                                                  ds: '',
                                                  orgId: '',
                                                  zzmc: '',
                                                  zzbm: '',
                                                  yysx: '',
                                                  czfy: '',
                                                  lsdkfy: '',
                                                  xqqrbh: '',
                                                  ddzt: '',
                                                  qfjebhs: '',
                                                  qfjehs: '',
                                                  yydl: '',
                                                  qfyyttww: '',
                                                  qfyyttyw: '',
                                                  zzyy: '',
                                                  bz: '',
                                                  zstj57: '',
                                                  zstj8: '',
                                                  zstj9: '',
                                                  zstj10: '',
                                                  zstj11: '',
                                                  zstj12: '',
                                                  sycybhs: '',
                                                  sycyhs: '',
                                                  fylx: '',
                                                  zyyysm: '',
                                                  sfyjj: '',
                                                  zp: '',
                                                  glqy: '',
                                                  qx: '',
                                                  rn1: '',
                                                  zstj202501: '',
                                                  zstj202502: '',
                                                  sfqyyy: '',
                                                  zstj202503: '',
                                                  yydlzb:'',
                                                  ywlx: '',
                                                  cyfl: '',
                                                  qbfyx: '',
                                                  dxfkdlmx: '',
                                                  tfgdxdsj: '',
                                                  ltfkdlmx: '',
                                                  xdsj: '',
                                                  zytzqk: ''
                        },
                        submitLoading: false,
                        // 新增合同查询相关数据
                        showContractFields: false,
                        contractDialogVisible: false,
                        contractSearchForm: {
                            htbh: ''
                        },
                        contractList: [],
                        contractPage: {
                            currentPage: 1,
                            pageSize: 10,
                            total: 0
                        }
                    };
                },
                mounted() {

                },
                created() {
                    this.getToken();
                    this.selectone();
                },
                methods: {
                    selectone() {
                        //获取勾选数据的全部字段值
                        const paramsStr = window.location.search
                        const param = new URLSearchParams(paramsStr)
                        var id = param.get('formData')
                        var idsList = JSON.parse(id)
                        var id = idsList.ID
                        console.log('id' + id)
                        let params = {
                            'id': id + ""
                        }
                        let that = this
                        webApiMsapi(`/fack-tdc-crm-zgtz/getDateById`, 'get', params,
                            function(data) {
                                if (data.code == 200) {
                                    // 确保数据正确映射到form对象
                                    that.form = {
                                        ...that.form, // 保留默认值
                                        ...data.data // 用后端数据覆盖
                                    };
                                    console.log('that.form', that.form)
                                    // // 格式化日期字段
                                    // if (that.form.xqhtssrq) {
                                    //     that.form.xqhtssrq = that.formatDate(that.form.xqhtssrq);
                                    // }
                                    // if (that.form.xqhtsxrq) {
                                    //     that.form.xqhtsxrq = that.formatDate(that.form.xqhtsxrq);
                                    // }
                                    // if (that.form.yjxqrq) {
                                    //     that.form.yjxqrq = that.formatDate(that.form.yjxqrq);
                                    // }
                                    // // 初始化显示状态
                                    // that.handleContractStatusChange(data.data.dqxyzt);
                                    console.log('表单数据已更新:', that.form);
                                } else {
                                    that.$message({
                                        message: data.msg,
                                        type: 'error',
                                        center: true
                                    });
                                }
                            },
                            function(error) {
                                console.error('查询失败:', error);
                                that.$message({
                                    message: '获取数据失败,请刷新页面',
                                    type: 'error',
                                    center: true
                                });
                            })
                    },
                onSubmit(form1) {
                    console.log("这里执行提交方法")
                    this.$refs[form1].validate((valid) => {
                        if (valid) {
                            // const paramsStr = window.location.search
                            // const param = new URLSearchParams(paramsStr)
                            // var id = param.get('formData')
                            // console.log("解析后的id的值为:" + id)
                            // var idsList = JSON.parse(id)
                            // var id = idsList.ID
                            // console.log("解析后的id的值为:" + id)
                            let self = this;
                            webApiMsapi(`/fack-tdc-crm-zgtz/updatebyid`, 'post', self.form,
                                function(data) {
                                 if (data.code == 200) {
                                         window.parent.postMessage({
                                             params: {
                                                 visible: false,
                                                 message: data.msg,
                                                 success: true
                                             }
                                         })
                                     } else {
                                         self.$message({  // 改为 self
                                             message: data.msg,
                                             type: 'error',
                                             center: true
                                         });
                                         self.submitLoading = false;  // 改为 self
                                     }
                                })
                            this.importClose();
                            //this.dialogVisible = false
                        } else {
                            console.log('error submit!!');
                            return false;
                        }
                    });
                },
                    quxiao() {
                        window.parent.postMessage({
                            params: {
                                visible: false,
                                message: '已关闭',
                                success: true
                            }
                        })
                        this.submitLoading = false;
                        this.importClose();
                    },
                    importClose() {
                        this.showImportModel = false;
                        this.form = [];
                    },
                    getToken() {
                        let that = this;
                        let str = document.cookie;
                        let arr = str.split(';');
                        for (let i in arr) {
                            let a = arr[i].split('=')
                            if (a[0].includes("token")) {
                                that.headers.token = a[1];
                            }
                        }
                    },
                    // 处理续约状态变化
                    handleContractStatusChange(value) {
                        this.showContractFields = value === '合同签订';
                        if (!this.showContractFields) {
                            // 隐藏时清空合同相关字段
                            this.resetContractFields();
                        }
                    },
                    // 重置合同字段
                    resetContractFields() {
                        this.form.htbh = '';
                        this.form.htmc = '';
                        this.form.xthy = '';
                        this.form.hte = '';
                        this.form.fwqsrq = '';
                        this.form.fwzzrq = '';
                    },
                    // 打开合同查询弹窗
                    openContractSearch() {
                        if (!this.form.htbh) {
                            this.$message({
                                message: '合同编号不能为空',
                                type: 'warning',
                                center: true
                            });
                            return;
                        }
                        this.contractSearchForm.htbh = this.form.htbh;
                        this.searchContracts();
                        this.contractDialogVisible = true;
                    },
                    // 搜索合同
                    searchContracts() {
                        if (!this.contractSearchForm.htbh) {
                            this.$message({
                                message: '请输入合同编号',
                                type: 'warning',
                                center: true
                            });
                            return;
                        }

                        let that = this;
                        let params = {
                            htbh: this.contractSearchForm.htbh,
                            pageNum: this.contractPage.currentPage,
                            pageSize: this.contractPage.pageSize
                        };

                        webApiMsapi(`/ddm-htzl-htcz/getHtczByHtbh`, 'get', params,
                            function(data) {
                                if (data.code == 200) {
                                    that.contractList = data.data.list || [];
                                    that.contractPage.total = data.data.total || 0;
                                    console.log('data.data.list', data.data.list)
                                    if (that.contractList.length === 0) {
                                        that.$message({
                                            message: '未找到匹配的合同',
                                            type: 'info',
                                            center: true
                                        });
                                    }
                                } else {
                                    that.$message({
                                        message: data.msg,
                                        type: 'error',
                                        center: true
                                    });
                                }
                            },
                            function() {
                                that.$message({
                                    message: '查询失败,请重试',
                                    type: 'error',
                                    center: true
                                });
                            }
                        );
                    },
                    // 重置搜索
                    resetContractSearch() {
                        this.contractSearchForm.htbh = '';
                        this.contractPage.currentPage = 1;
                        this.contractList = [];
                    },
                    // 选择合同
                    selectContract(contract) {
                        this.form.htbh = contract.htbg;
                        this.form.htmc = contract.htbt;
                        this.form.hte = contract.htbhsje;
                        this.form.xthy = contract.sshy;
                        this.contractDialogVisible = false;
                    },
                    // 分页相关
                    handleSizeChange(size) {
                        this.contractPage.pageSize = size;
                        this.searchContracts();
                    },
                    handleCurrentChange(page) {
                        this.contractPage.currentPage = page;
                        this.searchContracts();
                    }
                }
            }
            var vue = Vue.extend(main);
            new vue().$mount('#app');
        }
    </script>
</html>


@RestController
@RequestMapping("/fack-tdc-crm-zgtz")
public class FackTDcCrmZgtzController {

    @Autowired
    private IFackTDcCrmZgtzService fackTDcCrmZgtzService;
    @Autowired
    private RedisDao redisDao;

    @GetMapping("/getDateById")
    public Result getDateById(String id, HttpServletRequest request){
        System.out.println(id);
        System.out.println("点击获取的id值为"+id);
        Result result = new Result();
        String token = request.getHeader("token");
        if (!redisDao.existsKey(token)) {
            result.setCode(-1);
            result.setMsg("登录超时");
            return result;
        }
        result.setData(fackTDcCrmZgtzService.selectById(id));
        result.setMsg("查询成功");
        result.setCode(200);
        return  result;
    }

    @PostMapping("/updatebyid")
public Result updateData(@RequestBody FackTDcCrmZgtz zgtzDto, HttpServletRequest request) {
    System.out.println("点击修改的id值为"+zgtzDto.getId());
    Result result = new Result();
    String token = request.getHeader("token");
        FackTDcCrmZgtz fackTDcCrmZgtz2 = new FackTDcCrmZgtz();
        fackTDcCrmZgtz2.setId(zgtzDto.getId());
        fackTDcCrmZgtz2.setZytzqk(zgtzDto.getZytzqk());
        // 验证登录状态
    if (!redisDao.existsKey(token)) {
        result.setCode(-1);
        result.setMsg("登录超时");
        return result;
    }
        try {
            if (zgtzDto==null) {
                result.setCode(-1);
                result.setMsg("数据为空");
                return result;
            }
            fackTDcCrmZgtzService.updatebyid(fackTDcCrmZgtz2);
            result.setCode(200);
            result.setMsg("更新成功");
        } catch (Exception e) {
            e.printStackTrace();
            result.setCode(-1);
            result.setMsg("更新失败"+e.getMessage());
        }


        return result;
}


}

  • 写回答

3条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-09-27 17:39
    关注

    让【宝码香车】来帮您解答,本回答参考DeepSeek编写,并整理提供。

    如果答案让您满意,请采纳、点赞、关注,非常感谢!
    .
    每日一句正能量,让它带给您好心情:路是自己走出来的,机会是自己创造的。
    .

    根据您描述的问题(前端和后端单独测试都正常,但联调时后端接收到的数据为null),结合提供的代码分析,问题很可能出现在前后端数据格式不匹配上。以下是详细分析和解决方案:

    问题分析

    1. 前端发送的数据格式:前端使用 webApiMsapi 发送 POST 请求,默认可能使用 application/x-www-form-urlencoded 格式
    2. 后端接收的数据格式:后端使用 @RequestBody 注解,期望接收 application/json 格式
    3. 格式不匹配导致:当前端发送的数据格式与后端期望的不一致时,Spring 无法正确解析,导致接收到的对象为 null

    解决方案

    方案一:修改前端请求(推荐)

    在前端请求中明确指定 Content-Type 为 application/json

    onSubmit(form1) {
        console.log("这里执行提交方法")
        this.$refs[form1].validate((valid) => {
            if (valid) {
                let self = this;
                
                // 修改请求头,明确指定JSON格式
                webApiMsapi(`/fack-tdc-crm-zgtz/updatebyid`, 'post', self.form,
                    function(data) {
                        if (data.code == 200) {
                            window.parent.postMessage({
                                params: {
                                    visible: false,
                                    message: data.msg,
                                    success: true
                                }
                            })
                        } else {
                            self.$message({
                                message: data.msg,
                                type: 'error',
                                center: true
                            });
                            self.submitLoading = false;
                        }
                    },
                    null, // 成功回调已定义
                    {
                        headers: {
                            'Content-Type': 'application/json;charset=UTF-8'
                        }
                    }
                )
                this.importClose();
            } else {
                console.log('error submit!!');
                return false;
            }
        });
    }
    

    如果 webApiMsapi 函数不支持额外参数,需要查看其实现或修改为使用 axios

    // 使用axios替代webApiMsapi
    axios.post('/fack-tdc-crm-zgtz/updatebyid', self.form, {
        headers: {
            'Content-Type': 'application/json;charset=UTF-8',
            'token': self.headers.token // 如果需要token
        }
    }).then(function(response) {
        if (response.data.code == 200) {
            window.parent.postMessage({
                params: {
                    visible: false,
                    message: response.data.msg,
                    success: true
                }
            })
        } else {
            self.$message({
                message: response.data.msg,
                type: 'error',
                center: true
            });
        }
    }).catch(function(error) {
        console.error('请求失败:', error);
        self.$message({
            message: '请求失败',
            type: 'error',
            center: true
        });
    });
    

    方案二:修改后端接收方式

    如果前端无法修改,可以调整后端接收参数的方式:

    @PostMapping("/updatebyid")
    public Result updateData(HttpServletRequest request, 
                            @RequestParam(value = "id", required = false) String id,
                            @RequestParam(value = "zytzqk", required = false) String zytzqk) {
        
        System.out.println("点击修改的id值为" + id);
        Result result = new Result();
        String token = request.getHeader("token");
        
        // 验证登录状态
        if (!redisDao.existsKey(token)) {
            result.setCode(-1);
            result.setMsg("登录超时");
            return result;
        }
        
        try {
            if (id == null) {
                result.setCode(-1);
                result.setMsg("ID不能为空");
                return result;
            }
            
            FackTDcCrmZgtz fackTDcCrmZgtz2 = new FackTDcCrmZgtz();
            fackTDcCrmZgtz2.setId(id);
            fackTDcCrmZgtz2.setZytzqk(zytzqk);
            
            fackTDcCrmZgtzService.updatebyid(fackTDcCrmZgtz2);
            result.setCode(200);
            result.setMsg("更新成功");
        } catch (Exception e) {
            e.printStackTrace();
            result.setCode(-1);
            result.setMsg("更新失败" + e.getMessage());
        }
        
        return result;
    }
    

    方案三:添加调试信息

    在控制器中添加调试代码来确认接收到的数据:

    @PostMapping("/updatebyid")
    public Result updateData(HttpServletRequest request, @RequestBody(required = false) FackTDcCrmZgtz zgtzDto) {
        
        // 调试信息
        System.out.println("接收到的对象是否为null: " + (zgtzDto == null));
        
        if (zgtzDto != null) {
            System.out.println("接收到的ID: " + zgtzDto.getId());
            System.out.println("接收到的zytzqk: " + zgtzDto.getZytzqk());
        } else {
            // 尝试从请求体中读取原始数据
            try {
                String body = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
                System.out.println("原始请求体: " + body);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        // 原有业务逻辑...
    }
    

    调试建议

    1. 浏览器开发者工具:查看Network标签,确认前端实际发送的请求头和请求体格式
    2. 后端日志:添加更多调试日志,确认数据接收情况
    3. Postman对比:用Postman模拟前端相同的请求格式,对比差异

    推荐优先尝试方案一,因为保持前后端数据格式一致是最佳实践。如果问题仍然存在,请提供前端实际发送的请求详情以便进一步分析。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月5日
  • 已采纳回答 9月27日
  • 创建了问题 9月27日