You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 15:03:11