Postman请求Java Spring后端正常但React fetch请求失败,错误在哪?
问题原因及对应解决方法
表单默认提交行为中断请求
你的提交按钮放在<form>标签内部,浏览器默认会将form内未指定type的button识别为submit类型,点击后会触发表单默认提交、刷新页面,异步fetch请求还未执行完成就被中断。
修复方案二选一:- 给注册函数添加阻止默认行为逻辑:
function register(e){ e.preventDefault(); // 新增这行 // 原有fetch逻辑 }- 给按钮指定type为普通按钮:
<button type="button" onClick={register}>SIGN UP</button>后端未配置CORS跨域许可
Postman没有同源策略限制,所以请求可以正常执行,但浏览器会自动拦截不同源(前端端口一般是3000、后端是8080,端口不同属于跨域)的请求,除非后端明确配置允许前端域名访问。
Spring修复方案:在你的AuthController类或者对应的注册接口方法上添加@CrossOrigin(origins = "http://localhost:3000")注解即可,生产环境可以换成实际的前端域名。请求参数硬编码未读取输入内容
你当前代码里的请求体是固定写死的userName: 'Pala'和password: 'sibop',没有读取用户在输入框填写的内容,无法正常传递用户输入的注册信息。
修复示例:function register(e){ e.preventDefault(); const userName = document.getElementById('userName').value; const password = document.getElementById('password').value; fetch('http://localhost:8080/auth/register',{ method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ userName, password }) }).then(res => res.json()) // 新增响应解析逻辑 .then(data => console.log("Result: ", data)) .catch(err => console.log("Error: ", err)) }响应未解析无法查看实际返回内容
Fetch返回的res是原始Response对象,直接打印无法看到后端返回的业务数据或错误提示,需要先调用res.json()(接口返回JSON格式时)解析响应体后才能拿到实际内容。
内容的提问来源于stack exchange,提问作者I2mNew
相关产品推荐
相关产品推荐

