使用Axios向后端发送MSAL token时遇Approver1lvl空值报错如何解决
问题根源
你现在的错误核心是后端接收不到approver1lvl字段的值导致存入数据库时为null,主要有两个问题:
- 请求体结构和后端预期不匹配
你当前调用customInstance.post时传的参数是{user, userId: jwt.oid},相当于把approver1lvl等用户输入字段都嵌套在了user属性下,结合你Swagger调用成功的情况判断,后端预期是直接平级接收所有字段,所以取不到嵌套在user里的approver1lvl,判定为null触发数据库非空约束报错。 - 代码存在未定义变量
你从userData解构时额外写了不存在的date字段,构造user对象时还用到了未定义的birth变量,这部分也可能引发额外的字段异常。
修复方案
直接把所有需要的字段和从JWT取到的userId平级放在请求体里即可,同时清理无效变量:
const handleSubmit = () => { var token = localStorage.getItem("msal.idtoken"); var jwt = jwt_decode(token); const { firstName, surname, co, homeAddress, postCode, city, country, phonePrefix, phoneNumber, email, approver1lvl, employeeId, // 如果确实需要birth字段,记得先在useState的初始化字段里加上birth } = userData; // 可以加个日志先确认approver1lvl是否已经正确赋值 console.log('approver1lvl值校验:', approver1lvl); customInstance.post("Request", { firstName, surname, co, homeAddress, postCode, city, country, phonePrefix, phoneNumber, email, approver1lvl, employeeId, // 如果需要birth字段就加,不需要就删掉 // birth, userId: jwt.oid }).then((response) => {}); };
如果你的后端确实要求用户字段嵌套在user属性下,那需要确认后端实体类中Approver1lvl字段属于user对应的子实体,同时检查前端的approver1lvl表单绑定是否正常,确保提交前该字段已经被正确赋值到userData里。
内容的提问来源于stack exchange,提问作者cowefe
相关产品推荐
相关产品推荐

