【问题解决】Postman 测试报错 406

现象

Tomcat 日志

org.springframework.web.servlet.handler.AbstractHandlerExceptionResolver.logException Resolved org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation

HTTP状态 406 - 不可接收 的报错,核心原因

客户端的请求头 Accept 无法匹配服务端可返回的数据类型(例如 JSON),导致 SpringMVC 无法找到合适的表示(representation)返回

🎯 关键问题分析

原始接口:

java 复制代码
@GetMapping("/save")
@ResponseBody
public String save() {
    return "{'info': 'springmvc'}";
}

问题原因:

  1. @ResponseBody + String 返回 JSON 字符串 ,但 SpringMVC 认为它是 text/plain 类型;
  2. 如果 Postman 的 Accept 请求头为 application/json,SpringMVC 会尝试返回 JSON;
  3. 结果不匹配,服务端无法满足客户端请求的数据格式要求,返回 406

🛠️ 解决方案一:改返回类型 + 自动 JSON 转换

修改返回类型为 Map 或 Java 对象,SpringMVC 会自动将其序列化为 JSON(需引入 Jackson)

修改示例:

java 复制代码
@GetMapping("/save")
@ResponseBody
public Map<String, String> save() {
    Map<String, String> map = new HashMap<>();
    map.put("info", "springmvc");
    return map;
}

Maven 依赖 Jackson(Spring6 通常自动包含):

xml 复制代码
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.18.2</version>
</dependency>

🛠️ 解决方案二:Postman 设置 Accept 为 text/plain

如果不修改接口代码,仍返回字符串 "{}",则 Postman 需要这样设置:

  1. 在 Headers 中添加:

    vbscript 复制代码
    Accept: text/plain
  2. 或删除 Accept 头,让它使用默认(*/*);


🛠️ 解决方案三:显式指定返回类型为 JSON

java 复制代码
@GetMapping(value = "/save", produces = "application/json;charset=UTF-8")
@ResponseBody
public String save() {
    return "{\"info\": \"springmvc\"}";
}

这样 Spring 会将字符串当成 JSON 返回,避免 406


🧩 总结

方案 优点 注意
返回对象(Map/类) 推荐,Spring自动 JSON 需 Jackson 依赖
改 Accept 头 快速,适合测试 返回非标准 JSON
指定 produces 控制精确 手写 JSON 且需转义
相关推荐
Joy T3 小时前
Agent 确定性上下文设计:从 Prompt 参数注入到能力分层
java·开发语言·微服务·架构·prompt·agent context
m0_587383006 小时前
广州 24 小时自助健身房解决方案技术实现与实战指南
java·spring·小程序·架构·需求分析
·云扬·6 小时前
Prompt 工程与安全:从 System 设计到注入防御
java·人工智能·安全·ai·prompt
代码不停7 小时前
自动化测试(java)
java·开发语言·selenium·自动化
唠点键盘之外的8 小时前
26 向量数据库实战:从 0 搭一条能用的检索链路(pgvector + Spring AI)
数据库·人工智能·spring
鬼手点金9 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
paopaokaka_luck10 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
考虑考虑10 小时前
@JsonInclude注解使用
spring boot·后端·spring
Wang's Blog10 小时前
Java 项目实战: 交友项目 - Dubbo 的内部结构与一次调用的完整链路
java·dubbo
Wang's Blog10 小时前
Java 项目实战: 交友项目 - Dubbo 入门引导
java·dubbo·交友