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

SpringBoot MVC项目REST GET接口返回406响应码排查求助

SpringBoot GET接口固定返回406排查方案
  • 核心问题大概率出在返回类的序列化配置上,你当前的AnalysisDetailResponse和内部类PostDetail仅添加了@Builder、@ToString注解,没有生成Jackson序列化所需的Getter方法,也没有开放内部类的访问权限,导致Jackson无法识别可序列化的字段,序列化失败后SpringMVC会返回406状态码,和请求头、produces配置无关。

具体排查和解决步骤

  1. 给返回类和内部类添加Getter注解
    Lombok的@Builder不会自动生成Getter方法,Jackson序列化需要通过Getter读取类字段值,没有对应Getter的类会被Jackson判定为无有效可序列化字段,无法生成JSON响应。给两个类都添加@Getter注解即可解决,修改后的代码如下:
@Builder
@ToString
@Getter // 新增注解
public class AnalysisDetailResponse {

    @NotNull
    private Long id;

    @NotNull
    private AnalysisStatus state;

    private String failedSummary;

    @NotNull
    @NotEmpty
    @Valid
    private List<PostDetail> posts;

    @Builder
    @ToString
    @Getter // 新增注解
    public static class PostDetail { // 把private访问权限改为public,允许Jackson访问

        @NotNull
        private Long id;

        @NotNull
        private float score;

        @NotNull
        private String body;

        private List<String> childBodyList;
    }
}
  1. 验证枚举类序列化逻辑
    如果添加Getter后仍有问题,排查AnalysisStatus枚举类是否有自定义序列化规则、是否存在未处理的枚举值,可以临时将state字段类型改为String测试接口是否可以正常返回。
  2. 排查自定义MessageConverter配置
    检查项目中是否存在自定义的HttpMessageConverter配置,是否对特定返回类型做了拦截处理,覆盖了默认的Jackson JSON序列化逻辑。
  3. 快速验证序列化问题
    临时修改接口返回值为ResponseEntity.ok(Collections.singletonMap("test","value")),如果可以正常返回JSON,即可100%确认是原返回类的序列化配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:39:02