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

Java Spring Boot中415 Unsupported Media Type错误解决

问题原因

你遇到的415错误核心原因是**@JsonBackReference注解被错误地标注在集合类型(List<Question>)上**。Jackson的@JsonBackReference仅支持单个对象的反向引用,无法处理集合类型,这导致反序列化时出现类型不兼容的异常,触发了InvalidDefinitionException。

解决方案

下面提供两种可行的解决方式,既能保留预期的序列化响应,又能修复POST请求的415错误:

方案一:调整@JsonManagedReference与@JsonBackReference的位置

正确的注解配对规则是:

  • 在**多对一(ManyToOne)**的关联字段上标注@JsonBackReference(忽略反向序列化,避免循环)
  • 在**一对多(OneToMany)**的集合字段上标注@JsonManagedReference(主动序列化关联集合)

修改后的实体代码:

Question类

public class Question {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String question;
    private Integer question_order;

    @ManyToOne
    @JsonBackReference
    private QuestionGroup questionGroup;
}

QuestionGroup类

public class QuestionGroup {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String group_name;

    @OneToMany(mappedBy = "questionGroup")
    @JsonManagedReference
    private List<Question> questions;
}

调整后:

  • GET请求序列化时,QuestionGroup会正常返回包含的questions列表,Question会忽略questionGroup的序列化(避免循环引用)
  • POST请求反序列化时,Jackson可以正确识别单个QuestionGroup对象的反向引用,不会再出现类型不兼容错误

方案二:使用@JsonIgnoreProperties替代(更灵活)

如果不想依赖@JsonManagedReference/@JsonBackReference的严格配对,可以用@JsonIgnoreProperties直接指定需要忽略的关联属性,同时支持序列化和反序列化:

Question类

public class Question {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String question;
    private Integer question_order;

    @ManyToOne
    @JsonIgnoreProperties("questions")
    private QuestionGroup questionGroup;
}

QuestionGroup类

public class QuestionGroup {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String group_name;

    @OneToMany(mappedBy = "questionGroup")
    @JsonIgnoreProperties("questionGroup")
    private List<Question> questions;
}

这种方式的优势:

  • 既避免了循环序列化问题,又能保留Question中的questionGroup对象(只要请求体中包含该字段,就能正确反序列化)
  • 对集合类型无限制,适配更复杂的实体关联场景
关于@JsonIdentityInfo的补充

你之前使用@JsonIdentityInfo时出现序列化忽略questionGroup的问题,大概率是注解配置不当(比如未指定正确的标识属性)。但相比之下,上面两种方案更直接匹配你的需求,无需额外配置复杂的标识生成规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:02:28