使用Axios向Strapi提交JSON,participantLoggingData字段始终为空
问题解决:Strapi JSON字段始终返回null的排查方案
1. 核对Content Type字段配置
- 打开Strapi后台的Content Type Builder,找到
Participant类型的participantLoggingData字段:- 确认字段的API ID完全是
participantLoggingData,没有拼写错误(大小写、下划线都要严格对应); - 检查字段是否开启了
Allow null,若不需要存null可关闭,但核心是确认字段存储规则未限制写入; - 确保字段类型确实是JSON,而非Text等其他类型。
- 确认字段的API ID完全是
2. 修正请求体格式(最常见问题)
Strapi v4的CRUD接口要求请求数据必须包裹在data对象内,忽略这个结构会导致字段无法被识别:
- 正确的POST请求体示例:
{ "data": { "participantLoggingData": { "logType": "user_action", "details": {"action": "submit", "timestamp": 1699999999} } } } - 用Postman测试时,务必设置请求头
Content-Type: application/json,避免格式解析错误; - Axios会自动处理JSON序列化,无需用
JSON.stringify()包裹数据,直接传递上述格式的JavaScript对象即可。
3. 排查自定义控制器/生命周期钩子
如果自定义了Participant的控制器或生命周期函数:
- 检查
create/update控制器代码,确保ctx.request.body.data中的participantLoggingData字段被正确传递给服务层方法; - 比如自定义控制器中,调用
strapi.service('api::participant.participant').create()时,参数要包含data: ctx.request.body.data,不能遗漏该字段; - 检查生命周期钩子(如
beforeCreate)是否存在修改或清空participantLoggingData的逻辑。
4. 验证数据库字段类型
直接查看数据库中的participants表:
- 确认
participantLoggingData字段的类型为JSON(MySQL)或jsonb(PostgreSQL); - 如果字段类型是VARCHAR或其他非JSON类型,会导致Strapi无法存储JSON数据,从而默认存null。这种情况需删除字段重新创建,或手动修改数据库字段类型。
5. 升级Strapi到稳定版
部分旧版本的Strapi存在JSON字段存储bug,尝试升级到当前最新的v4稳定版本,再测试字段写入是否正常。
内容的提问来源于stack exchange,提问作者GipfelHyperon
相关产品推荐
相关产品推荐

