You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postman请求Java Spring后端正常但React fetch请求失败,错误在哪?

问题原因及对应解决方法

  • 表单默认提交行为中断请求
    你的提交按钮放在<form>标签内部,浏览器默认会将form内未指定type的button识别为submit类型,点击后会触发表单默认提交、刷新页面,异步fetch请求还未执行完成就被中断。
    修复方案二选一:

    1. 给注册函数添加阻止默认行为逻辑:
    function register(e){
      e.preventDefault(); // 新增这行
      // 原有fetch逻辑
    }
    
    1. 给按钮指定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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:45:04