- 正常的JSON应该是:
json
Apply to VectorServic...
{
"id": "d471c19c-70eb-4f29-8604-b8284e8a9400",
"text": "人为干预, 降低生产成本...",
"metadata": {
"chunkIndex": 2,
"totalChunks": 5,
"attachmentId": 586,
"score": null
}
}
- 但现在变成了:
text
Apply to VectorServic...
"{"id":"d471c19c-70eb-4f29-8604-b8284e8a9400","text":"人为干预..."}"
问题原因
这个问题通常发生在以下情况:
- 对象先被序列化为JSON字符串
- 然后这个字符串又被当作普通字符串值,再次进行JSON序列化
- 导致转义字符(如\")出现
解决方法
- 统一使用Spring管理的ObjectMapper
- 替换所有new ObjectMapper()为注入的objectMapper
- 确保整个应用使用相同的序列化/反序列化设置
- 配置RedisTemplate使用StringRedisSerializer
- 新增RedisConfig类,配置序列化器
- 避免RedisTemplate默认的JdkSerializationRedisSerializer造成的二次序列化
- 修复保存与读取DocumentChunk的逻辑
- 确保保存时只序列化一次
- 确保读取时正确反序列化
这些修改应该能解决Redis中存储的数据出现\"等转义字符的问题,使JSON数据恢复正常格式。
后续验证建议
- 重新启动应用
- 重新上传并处理一些文档
- 在Redis管理工具中检查键"attachmentId:XXX_chunk_0"的内容,确认JSON格式正确
- 验证搜索功能是否能正确获取并使用文档内容