如何解决Spring Boot中的HttpMediaTypeNotAcceptableException错误?
解决Spring Boot中HttpMediaTypeNotAcceptableException(406 Not Acceptable)错误
问题场景
使用Spring Boot开发用户注册REST API,通过GenericResponse类结合ResponseEntity统一处理响应时,触发org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation错误,Postman返回406状态码,提示可接受的响应格式为[application/json, application/*+json]。
可能的原因及解决方案
1. GenericResponse类不满足JSON序列化要求
Jackson序列化Java对象时,需要具备以下条件之一:
- 类拥有public无参构造方法
- 字段提供public getter方法
- 通过
@JsonProperty等注解显式指定字段序列化规则
当前你的GenericResponse类存在两个问题:
- 构造方法为private,Jackson无法通过反射创建实例
- 所有字段(
message/status/data)均为private且无getter方法,Jackson无法读取字段值
修改示例:
public class GenericResponse<T> { private String message; private int status; private T data; // 添加public无参构造 public GenericResponse() { } // 添加字段getter方法 public String getMessage() { return message; } public int getStatus() { return status; } public T getData() { return data; } // 保留原Builder类 public static class GenericResponseBuilder<T> { private GenericResponse<T> genericResponse; public GenericResponseBuilder() { genericResponse = new GenericResponse<T>(); } public GenericResponseBuilder<T> setMessage(String message) { genericResponse.message = message; return this; } public GenericResponseBuilder<T> setStatus(int status) { genericResponse.status = status; return this; } public GenericResponseBuilder<T> setData(T data) { genericResponse.data = data; return this; } public GenericResponse<T> build() { return this.genericResponse; } } }
2. 缺少JSON序列化依赖
若项目未引入spring-boot-starter-web,或手动排除了Jackson相关依赖,会导致无法将对象序列化为JSON格式。
依赖配置:
Maven(pom.xml):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
Gradle(build.gradle):
implementation 'org.springframework.boot:spring-boot-starter-web'
若已存在web starter但问题仍存在,可显式添加Jackson依赖:
Maven:
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
Gradle:
implementation 'com.fasterxml.jackson.core:jackson-databind'
3. 请求Accept头配置异常
尽管错误提示已明确可接受格式,但仍需检查Postman请求头:
- 确认
Accept头设置为application/json(或留空,Postman默认会发送适配的Accept头) - 避免设置后端无法处理的格式(如
text/plain、text/html等)
验证修改
完成上述调整后,重启Spring Boot应用,再次请求/user/register接口,即可正常返回序列化后的JSON响应。
内容的提问来源于stack exchange,提问作者Saurabh
相关产品推荐
相关产品推荐

