错误消息: JSON parsing failed: Text: org.springframework.web.servlet.mvc.method.anno...

2026年05月08日 01:44 状态: processing

🚨 错误信息

错误名称: AI_ProviderSpecificError 错误消息: JSON parsing failed: Text: org.springframework.web.servlet.mvc.method.annotation.SseEmitter$SseEventBuilderImpl@3cf07406. Error message: JSON Parse error: Unexpected character: o 堆栈跟踪: AI_ProviderSpecificError: JSON parsing failed: Text: org.springframework.web.servlet.mvc.method.annotation.SseEmitter$SseEventBuilderImpl@3cf07406. Error message: JSON Parse error: Unexpected character: o at construct (native) at _callSuper (address at index.android.bundle:1:278429) at _AISDKError (address at index.android.bundle:1:5445273) at construct (native) at _callSuper (address at index.android.bundle:1:278429) at ProviderSpecificError (address at index.android.bundle:1:5465586) at convertAndEmitChunk (address at index.android.bundle:1:5462374) at ?anon_0_ (address at index.android.bundle:1:5461652) at next (native) at asyncGeneratorStep (address at index.android.bundle:1:844868) at _next (address at index.android.bundle:1:845125) at tryCallOne (address at InternalBytecode.js:1:1180) at anonymous (address at InternalBytecode.js:1:1874) 原因: { "name": "AI_JSONParseError", "cause": {}, "text": "org.springframework.web.servlet.mvc.method.annotation.SseEmitter$SseEventBuilderImpl@3cf07406" }

🤖 AI解决方案

错误分析报告

#### 1. 误翻译


原文:JSON Parse error: Unexpected character: o
译文:JSON解析错误:遇到意外字符‘o’

#### 2 原因分析

  • 根本原因:后端错误地将一个Java对象的内存地址字符串org.springframework.web...@3cf07406)作为JSON数据发送给了前端,而不是有效的JSON格式数据。

  • 直接原因:前端(或AI SDK)在处理SSE(Server-Sent Events)流时,接收到的 text 字段内容并非合法的JSON字符串,因此在解析时因首个字符o(来自org.)不符合JSON语法而失败。

  • 问题定位:问题出在后端服务构建SSE事件(SseEventBuilder)的环节。开发者可能错误地将事件构建器对象本身或其toString()结果,当作事件数据(data)发送了。
  • #### 3.方案
    修复后端代码,确保通过 SseEmitter 发送的是可序列化的数据对象或字符串,而不是对象引用。

    java
    // 错误示范 ❌ - 直接发送了对象引用或其字符串
    SseEmitter.SseEventBuilder event = SseEmitter.event()
    .data(someObject.toString()); // 如果 someObject 是复杂对象,其toString()可能是地址

    // 正确示范 ✅ - 发送对象本身,让 Spring 自动序列化为 JSON
    SseEmitter.SseEventBuilder event = SseEmitter.event()
    .data(myDataObject); // 确保 myDataObject 可以被 Jackson 序列化

    // 或者明确发送一个已格式化的 JSON 字符串
    SseEmitter.SseEventBuilder event = SseEmitter.event()
    .data("{\"key\": \"value\", \"message\": \"这是一条有效的JSON消息\"}");

    修复步骤:

  • 在后端代码中,找到创建和发送 SseEmitter 事件的逻辑。

  • 检查 .data(...) 方法中传入的参数。

  • 确保传入的是需要前端处理的实际业务数据对象(如DTO、Map),而不是 SseEventBuilderImpl 对象本身或其他未重写 toString() 的对象。
  • #### 4️ 预防措施

  • 数据序列化检查:在后端单元测试中,增加对通过SSE发送的数据的验证,确保其能被正确序列化为JSON格式。

  • 前端容错处理:在前端或AI SDK的 convertAndEmitChunk 函数中,增加对 text 字段的预检查,例如使用 try-catch 包裹JSON解析逻辑,并对解析失败的情况进行日志记录和友好处理。

  • 开发调试:在开发环境下,可以开启对SSE事件的详细日志记录,打印出发送的原始数据内容,便于快速发现格式问题。