【问题解决】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 设置 Accepttext/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 且需转义
相关推荐
心之语歌2 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊3 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang4 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
用户8307196840824 小时前
spring ai alibaba + nacos +mcp 实现mcp服务负载均衡调用实战
spring boot·spring·mcp
Ray Liang5 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解5 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
SimonKing9 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean9 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven9711 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java
皮皮林55120 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java