当前位置: 首页 > news >正文

HttpMediaTypeNotAcceptableException报错解决,状态码显示为406

当返回类没有添加 gettersetter 方法时出现 HTTP 406 错误(Not Acceptable),主要与 Spring 框架处理响应数据的机制以及消息转换器的工作原理有关
(注意前提,你已经添加了json相关库的依赖)

消息转换器的工作原理

在 Spring 框架中,当控制器方法返回一个对象时,Spring 会使用消息转换器(Message Converter)将该对象转换为客户端可接受的媒体类型(如 JSON、XML 等)。以常见的 JSON 格式为例,Spring 通常使用 Jackson 库来完成对象到 JSON 的转换。

缺少 gettersetter 方法导致的问题

1. 对象属性无法访问

Jackson 在将 Java 对象转换为 JSON 字符串时,依赖于对象的 getter 方法来获取对象的属性值。如果返回类没有提供 getter 方法,Jackson 就无法访问对象的属性,也就无法将这些属性转换为 JSON 格式的键值对。

例如,有一个简单的 User 类:

public class User {
    private String name;
    private int age;
    // 没有提供 getter 和 setter 方法
}

当控制器方法返回 User 对象时,Jackson 无法获取 nameage 属性的值,就无法生成有效的 JSON 响应。

2. 消息转换器无法处理

由于消息转换器无法将对象正确转换为客户端期望的媒体类型,服务器就无法提供符合客户端 Accept 头要求的响应。客户端请求的媒体类型(如 application/json)在服务器端无法得到正确的表示,从而触发 HttpMediaTypeNotAcceptableException 异常,返回 HTTP 406 错误。

解决办法

为返回类添加 gettersetter 方法,以便消息转换器能够正常访问和处理对象的属性。修改后的 User 类如下:

public class User {
    private String name;
    private int age;

    // 提供 getter 方法
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    // 提供 setter 方法
    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

这样,当控制器方法返回 User 对象时,Jackson 可以通过 getter 方法获取属性值,并将其转换为 JSON 格式的响应,避免了 HTTP 406 错误。

此外,如果你使用的是 Lombok 库,可以通过添加 @Getter@Setter 注解来自动生成 gettersetter 方法,简化代码:

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class User {
    private String name;
    private int age;
}

相关文章:

  • 深度学习分类回归(衣帽数据集)
  • 98.在 Vue3 中使用 OpenLayers 根据 Resolution 的不同显示不同的地图
  • 【C++】数据类型
  • LLM中的transformer结构学习(二 完结 Multi-Head Attention、Encoder、Decoder)
  • Python之pyqt5生成计算机前端页面并运行
  • 零成本短视频爆款制造手册
  • Python正则表达式完全指南:从入门到精通
  • 使用AI一步一步实现若依前端(5)
  • Catia 转 StL:打通数字化设计与制造的关键纽带
  • TCP并发服务器
  • Vue 实现智能检测文字是否溢出,溢出显示省略号,鼠标悬浮显示全部【附封装组件完整代码+详细注释+粘贴即食】
  • Vue前端开发-Coupon组件
  • javaweb自用笔记:请求参数、响应、分层解耦、
  • 一二三应用开发平台——能力扩展:多数据源支持
  • 模板方法模式的C++实现示例
  • React基础之项目实战
  • 贵工程寝室报修系统的设计与实现
  • JavaScript 变量与常量全面解析
  • 在线程间共享数据_第三章_《C++并发编程》笔记
  • 什么是Flask
  • 广西隆林发生一起山洪灾害,致4人遇难
  • 三部门印发《2025年深入推进IPv6规模部署和应用工作要点》
  • 萨洛宁、康托罗夫、长野健……7月夏季音乐节来很多大牌
  • 上影节官方海报公布:电影之城,每一帧都是生活
  • 上海中心城区首条“定制化低空观光航线”启航,可提前一天提需求
  • 世卫大会连续9年拒绝涉台提案