React使用Axios发起put请求更新customer数据异常问题求助
问题定位与修复方案
1. lastName字段传值为null问题
原因:前端请求体键名拼写错误,代码中写为LastName: lastName(首字母大写),和后端CustomerDto类定义的小驼峰lastName字段名不匹配,JSON反序列化时无法对应赋值,因此该字段为null。
修复:将axios.put请求体中的对应键名改为小驼峰:
{ firstName: firstName, lastName: lastName, // 将大写开头的LastName改为小写开头的lastName email: email, password: password }
2. 接口新增数据而非更新问题
原因:Service层逻辑遗漏主键赋值,你虽然通过路径参数id判断了目标用户存在,但是customerMapper.toDao(customerDto)转换得到的customerDao对象没有携带主键值,JPA的saveAndFlush()方法检测到实体主键为空时,会默认执行新增操作而非更新操作。
修复:在调用saveAndFlush之前,给转换后的实体设置主键:
if (!custRepo.existsById(id)) throw new DoesNotExistException("Customer does not exist"); customerDao.setId(id); // 新增该行,给实体赋值目标主键 custRepo.saveAndFlush(customerDao);
额外优化建议
你当前代码中useEffect为空依赖,页面加载完成后会自动调用一次formData(),此时所有输入字段均为空值,会触发一次无效的更新请求,建议删除该useEffect逻辑,或补充正确的依赖项避免误触发请求。
内容的提问来源于stack exchange,提问作者Fastaca Girasol
相关产品推荐
相关产品推荐

