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

通过Postman调用Spring Boot接口出现Not Acceptable(406)错误求助

问题分析与解决

问题描述

我基于Spring Boot编写了如下接口代码:

@RestController
@RequestMapping("/Home")
public class HomeController {
    
    private final IHomeService homeService;

    @Autowired
    public HomeController(IHomeService homeService){
        this.homeService = homeService;
    }

    @GetMapping("/hello")
    public @ResponseBody Emp hello() {
        return homeService.getEmp();
    }
}

期望通过Postman调用时返回JSON格式的对象,但收到如下错误响应:

{
    "timestamp": "2024-04-30T11:39:23.093+00:00",
    "status": 406,
    "error": "Not Acceptable",
    "path": "/Home/hello"
}

可能的原因及解决办法

1. 缺失JSON序列化依赖

Spring Boot默认依赖Jackson处理JSON序列化,而spring-boot-starter-web已经包含该依赖。检查项目依赖配置:

  • 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'

若缺失则添加,之后重新构建项目。

2. Postman请求头Accept设置错误

406错误的核心原因是服务器无法生成客户端Accept头指定的响应格式。检查Postman请求:

  • 将Accept头设置为application/json
  • 或直接删除Accept头,让服务器自动返回默认格式(通常为JSON)

3. Emp实体类存在序列化问题

Jackson序列化对象需要满足以下条件:

  • 类必须有无参构造函数
  • 私有字段必须提供对应的getter方法,或用@JsonProperty注解标注字段

示例符合要求的Emp类:

public class Emp {
    private Long id;
    private String name;

    // 必须存在无参构造
    public Emp() {}

    // 全参构造(可选)
    public Emp(Long id, String name) {
        this.id = id;
        this.name = name;
    }

    // 字段对应的getter方法
    public Long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    // setter方法(按需添加)
    public void setId(Long id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }
}

4. 显式指定接口返回格式

在@GetMapping注解中通过produces属性明确指定返回JSON格式:

@GetMapping(value = "/hello", produces = MediaType.APPLICATION_JSON_VALUE)
public Emp hello() {
    return homeService.getEmp();
}

注:@RestController注解已包含@ResponseBody功能,方法上的@ResponseBody可以省略。

内容的提问来源于stack exchange,提问作者OMM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 00:27:03