【问题解决】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 且需转义
相关推荐
Eugene__Chen8 分钟前
java IO/NIO/AIO
java·python·nio
xixixin_22 分钟前
【uniapp】uni.setClipboardData 方法失效 bug 解决方案
java·前端·uni-app
工业互联网专业26 分钟前
基于springboot+vue的校园二手物品交易平台
java·vue.js·spring boot·毕业设计·源码·课程设计·校园二手物品交易平台
isfox33 分钟前
一文拆解 Java CAS:从原理到避坑全攻略
java
JPC客栈40 分钟前
LeetCode面试经典 150 题(Java题解)
java·leetcode·面试
HyperAI超神经1 小时前
【vLLM 学习】Aqlm 示例
java·开发语言·数据库·人工智能·学习·教程·vllm
异常驯兽师1 小时前
IntelliJ IDEA 项目导入后 Java 文件图标显示为红色小写 j 的解决方法
java·路径配置
纪元A梦1 小时前
华为OD机试真题——数据分类(2025A卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
java·javascript·c++·python·华为od·go·华为od机试题
常年游走在bug的边缘1 小时前
基于spring boot 集成 deepseek 流式输出 的vue3使用指南
java·spring boot·后端·ai
熙客1 小时前
Java并发:线程池
java