讲师中心 微信公众号
AI工具推荐 视频效率加速

Echo框架Context怎么验证请求类型是否为JSON

夏强吖_8963

夏强吖_8963

发布时间:2026-11-08 06:11:22

|

267人浏览过

|

来源于php中文网

原创

应通过c.Request().Header.Get("Content-Type")并用strings.HasPrefix()检查是否以"application/json"开头来判断JSON请求,因HTTP头大小写不敏感,建议先转小写;不可依赖Accept头、请求体花括号或c.Bind()失败反推,也不建议用字符串包含匹配以防误判变体类型。

echo框架context怎么验证请求类型是否为json

怎么用 echo.Context 判断请求是不是 JSON

直接看 Content-Type 头,别信 Accept 或请求体有没有花括号。Echo 的 c.Request().Header.Get("Content-Type") 是最可靠的方式,但要注意:值可能带参数(比如 application/json;charset=utf-8),不能用全等匹配。

推荐用 strings.HasPrefix() 检查前缀:

if strings.HasPrefix(c.Request().Header.Get("Content-Type"), "application/json") {
    // 是 JSON 请求
}

不建议用 c.Request().Method == "POST" && strings.Contains(...) 这类组合判断——PUT、PATCH 也合法传 JSON;strings.Contains 还可能误命中 application/vnd.api+json 等变体。

c.Bind() 失败时能不能反推是 JSON 格式问题

不能。因为 c.Bind() 失败的原因很多:字段类型不匹配、结构体 tag 写错、JSON 嵌套过深、甚至只是空 body。它不区分「不是 JSON」和「是 JSON 但结构不对」。

如果你需要明确区分错误类型,得先手动解析:

  • 用 json.NewDecoder(c.Request().Body).Decode(&v) 捕获 json.SyntaxError ——这才能确认是非法 JSON 字符串
  • 如果解码成功但字段为空,那大概率是 JSON 合法但内容不符合预期
  • 别忘了 c.Request().Body 只能读一次,后续再调 c.Bind() 会拿到空数据

为什么 c.IsJSON() 不存在

Echo 框架本身没提供 c.IsJSON() 这样的快捷方法。这是有意为之:框架只做轻量封装,类型判断逻辑太容易出歧义(比如要不要支持 text/json?要不要忽略大小写?要不要兼容旧浏览器发的 application/x-json?)。所以把判断权留给用户,避免隐式行为导致调试困难。

Expanso yaml-to-json
Expanso yaml-to-json

使用 Expanso Edge 管道将 YAML 输入转换为 JSON 格式。

下载

如果你项目里高频使用,可以自己封装一个:

func IsJSON(c echo.Context) bool {
    ct := c.Request().Header.Get("Content-Type")
    return strings.HasPrefix(strings.ToLower(ct), "application/json") ||
           strings.HasPrefix(strings.ToLower(ct), "text/json")
}

注意这里加了 strings.ToLower() ——HTTP 头大小写不敏感,但实际请求里可能混着 Application/JSON。

常见误判场景和坑

前端用 fetch 发请求但没设 headers: {'Content-Type': 'application/json'},后端就收不到 JSON 头;Postman 默认也不带,容易本地测试通过、上线就失败。

还有几个典型陷阱:

  • 表单提交(enctype="multipart/form-data")混传 JSON 字段,Content-Type 是 multipart 开头,不是 JSON
  • 某些网关或代理会改写 Content-Type,比如强制加 ; charset=utf-8,影响字符串比对
  • GET 请求理论上不该有 body 和 JSON 头,但有人硬塞,此时检查 Content-Type 仍有效,但业务上通常应拒绝

真正关键的不是“怎么判断”,而是“判断之后做什么”——比如非 JSON 请求直接 c.NoContent(http.StatusUnsupportedMediaType),比默默忽略更利于前端定位问题。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2275

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3702

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1236

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

4279

2025.09.10

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

Postman请求头Headers怎么设置
Postman请求头Headers怎么设置

围绕Postman HTTP请求头配置展开,讲解Headers选项的具体使用方式,包括Key和Value参数填写、请求头信息添加、常见Header字段设置及请求头修改方法,帮助用户解决接口调试过程中遇到的请求头配置问题。

0

2026.11.06

Postman接口请求发送教程
Postman接口请求发送教程

详细介绍Postman接口请求的创建与发送方法,涵盖GET和POST请求、URL配置、请求参数、Headers请求头、Body请求体设置以及响应结果查看,帮助用户掌握Postman接口请求的完整操作流程。

0

2026.11.06

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

20

2026.11.05

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

20

2026.11.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 21.3万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn