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

Spring Boot后端登录返回200,React调用res.json()报Unexpected end of JSON input错误

问题根因

SyntaxError: Unexpected end of JSON input 报错的核心原因是调用res.json()时,后端返回的响应体为空,或者不是合法的JSON格式,无法被JSON解析器处理。

排查&修复步骤

1. 补全请求头配置

你当前的fetch请求没有指定Content-Type头,Spring Boot无法正确识别请求体是JSON格式,很可能解析请求参数失败,即使返回状态码200,响应体也会为空。修改请求配置添加请求头:

headers: {
  'Content-Type': 'application/json'
}

2. 修正响应处理逻辑

res.json()是异步方法,直接打印会输出Promise对象而非解析结果,同时建议先查看原始响应内容,不要直接解析为JSON,避免解析报错:

async submit(e){
  e.preventDefault()
  const response = await fetch('http://localhost:8080/login', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(this.state)
  })

  // 优先检查响应头是否携带JWT:Spring Security登录场景下,JWT通常放在Authorization响应头中,响应体本身为空
  const jwtFromHeader = response.headers.get('Authorization')
  if(jwtFromHeader) {
    // 注意如果JWT带Bearer前缀,需要截取:jwtFromHeader.replace('Bearer ', '')
    console.log('从响应头获取的JWT:', jwtFromHeader)
    return
  }

  // 响应头没有JWT的话,查看原始响应体内容
  const rawResponse = await response.text()
  console.log('原始响应内容:', rawResponse)
  try {
    // 确认是JSON格式再解析
    const resData = JSON.parse(rawResponse)
    console.log('解析后的响应数据:', resData)
  } catch (err) {
    // 响应体是纯JWT字符串的话直接使用即可,无需解析
    console.log('直接从响应体获取的JWT:', rawResponse)
  }
}

3. 额外检查项

  • 注意你的原方法名写为sbmit,存在拼写错误,确认绑定事件的方法名是否匹配
  • 如果确认后端返回JSON格式,检查后端是否配置了跨域允许前端读取自定义响应头,若JWT放在自定义响应头中,需要后端配置Access-Control-Expose-Headers允许前端读取该字段

内容的提问来源于stack exchange,提问作者Med

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:48:03