当前位置: 首页 > news >正文

springboot后端的接口headers

问到了前后端通信中一个常被初学者混淆的重点——
为什么 fetch('/api/show', { headers: { 'Accept': 'text/plain' } }),而不是
headers: { 'Content-Type': 'application/json' }


🧩 一句话结论

👉 因为你的接口:

@GetMapping("/show")
public String action() {return "Hello Spring Boot!";
}

是一个 GET 请求,且返回纯文本(text/plain)
所以前端只需要告诉服务器「我能接受纯文本响应」(Accept),
而不需要告诉服务器「我发的是 JSON 数据」(Content-Type)。


📘 详细解释

Accept:表示客户端期望接收的数据格式

在你的 fetch 请求中:

headers: {'Accept': 'text/plain'
}

意思是:

“我(浏览器)希望服务器返回纯文本(text/plain)。”

而你的 Spring Boot 接口:

@GetMapping("/show")
public String action() {return "Hello Spring Boot!";
}

默认就是返回一个 text/plain 类型的响应。
👉 所以这两个是匹配的


Content-Type:表示客户端发送的数据格式

Content-Type 只在你**有请求体(body)**时才有意义。
例如:

fetch('/api/register', {method: 'POST',headers: { 'Content-Type': 'application/json' },body: JSON.stringify({ username: 'Tom', password: '123456' })
})

这时你告诉后端:

“我发给你的内容是 JSON 格式,请按 JSON 来解析。”

Spring Boot 中的 @RequestBody User user 就是用来解析这种 JSON 请求的。


✅ 结论总结

请求类型是否需要请求体用什么 header说明
GET /api/show❌ 无请求体'Accept': 'text/plain'告诉后端希望拿到纯文本
POST /api/register✅ 有请求体(JSON)'Content-Type': 'application/json'告诉后端发送的是 JSON

🔧 实际建议

其实即便你不写:

headers: { 'Accept': 'text/plain' }

浏览器默认也会发送 Accept: */*,Spring Boot 仍然能正确返回 "Hello Spring Boot!"

关于接口的get到html文件代码如下:

<!doctype html>
<html lang="zh-CN">
<head><meta charset="utf-8" /><meta name="viewport" content="width=device-width,initial-scale=1" /><title>Show API Demo</title><style>body {font-family: "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;display: flex;min-height: 100vh;align-items: center;justify-content: center;background: #f6f8fa;margin: 0;}.card {background: #fff;padding: 24px;border-radius: 12px;box-shadow: 0 6px 24px rgba(0,0,0,0.08);width: 360px;text-align: center;}h1 { margin: 0 0 12px; font-size: 20px; }#result {margin: 16px 0;padding: 12px;border-radius: 8px;background: #f0f4ff;min-height: 36px;display: flex;align-items: center;justify-content: center;color: #1a1a1a;}button {padding: 8px 14px;border-radius: 8px;border: none;cursor: pointer;background: #2b82ff;color: #fff;font-weight: 600;}.hint { margin-top: 10px; color: #666; font-size: 13px; }</style>
</head>
<body>
<div class="card"><h1>调用后端接口 /api/show</h1><div id="result">正在加载…</div><div><button id="refreshBtn">刷新</button></div><div class="hint">注意:如果后端与此页面不在同一域或端口,请开启 CORS。</div>
</div><script>const resultEl = document.getElementById('result');const btn = document.getElementById('refreshBtn');async function fetchShow() {resultEl.textContent = '加载中...';try {// 如果你的控制器映射在 /api 下,请使用 /api/showconst resp = await fetch('/api/show', {method: 'GET',headers: {'Accept': 'text/plain'}});if (!resp.ok) {resultEl.textContent = `请求失败:${resp.status} ${resp.statusText}`;return;}// 接口返回的是字符串,所以用 text()const text = await resp.text();resultEl.textContent = text;} catch (err) {console.error(err);resultEl.textContent = '网络错误,无法连接到后端。检查服务器是否运行或 CORS 是否已开启。';}}// 页面加载时自动请求一次window.addEventListener('load', fetchShow);btn.addEventListener('click', fetchShow);
</script>
</body>
</html>

效果图如下:

http://www.dtcms.com/a/560819.html

相关文章:

  • day04(11.2)——leetcode面试经典150
  • mysql常识和jdbc工具类的进化以及连接池思想
  • 七.Docker网络
  • 怎么做免费视频网站吗网站建设哪儿好
  • 推荐优质wordpress外贸网站主题
  • TDengine 数学函数 ASCII 用户手册
  • @Builder注解导致mybatis类型匹配错误 Cannot determine value type from string
  • AI模型开发 | 从零部署Deepseek OCR模型,零门槛开发PDF文档解析工具
  • Linux INPUT 子系统实验
  • 1000套实习报告模板大合集+多行业多专业实习总结实践报告素材
  • 百度网站快速优化国内flask做的网站
  • Spring AI--Prompt、多轮对话实现方案
  • 网页模板免费下载网站广州页面制作公司
  • Java:继承与多态
  • 10. 从0到上线:.NET 8 + ML.NET LTR 智能类目匹配实战--Web API 接口与前端集成:部署与生产运维:稳定性、可观测与成本
  • 网站开发招标网网站免费注册会员怎么做
  • linux系统中网络编程的实现
  • Vue-github 用户搜索案例
  • GD32F407VE天空星开发板的电压电流检测
  • 网站优化文章怎么做蔡甸城乡建设局网站
  • 中小企业网站开发韵茵全屋定制家具品牌排行榜前十名
  • 分库分表MyCat 架构迁移 OceanBase | 百丽核心财务系统迁移经验总结与问题汇总
  • joomla 企业网站模板沈阳网站优化 唐朝网络
  • Flink 优化-反压处理
  • AI代码开发宝库系列:LangChain 工具链:从LCEL到实际应用
  • 泉州网站排名优化十大免费论文网站
  • 高校招生网站建设做网站一定要效果图吗
  • 学习笔记四:性能度量
  • 使用JavaScript和Node.js构建简单的RESTful API
  • 【生活】做蛋糕