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

server/2025/3/13 10:10:59/
webkit-tap-highlight-color: rgba(0, 0, 0, 0);">

当返回类没有添加 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;
}

http://www.ppmy.cn/server/174602.html

相关文章

【51单片机】程序实验15.DS18B20温度传感器

主要参考学习资料:B站【普中官方】51单片机手把手教学视频 开发资料下载链接:http://www.prechin.cn/gongsixinwen/208.html 单片机套装:普中STC51单片机开发板A4标准版套餐7 目录 DS18B20介绍主要特性内部结构控制时序初始化时序写时序读时序…

NAT网络地址转换

目录 NAT是什么?(网络地址转换) NAT为什么重要? 解决IP地址不够用的问题 增强网络安全 NAT的工作原理 NAT的几种类型 静态NAT(Static NAT) 动态NAT(Dynamic NAT) NAPT(网络地址端口转换…

Flutter 小技巧之通过 MediaQuery 优化 App 性能

许久没更新小技巧系列,温故知新,在两年半前的《 MediaQuery 和 build 优化你不知道的秘密》 我们聊过了在 Flutter 内 MediaQuery 对应 rebuild 机制,由于 MediaQuery 在 MaterialApp 内,并且还是一个 InheritedWidget &#xff0…

【C语言】结构体篇

目录 结构体的定义结构体变量的声明和初始化声明结构体变量初始化结构体变量 访问结构体成员结构体数组结构体指针结构体嵌套结构体作为函数参数值传递指针传递 结构体的内存对齐位域 结构体的定义 结构体是一种自定义的数据类型,它把不同类型的数据组合成一个整体…

AI对前端开发的冲击

Cursor cursor新版本0.46版本号中有部分是改成了新布局其实 Agent 和 Edit 和 Composer 是一样的,为了方便大家使用,我们把它们合并了,Edit 相当于普通模式下的 Composer,Agent 就是代理模式。 快捷键ctrli、ctrll、ctrlk 4o适合…

SIP 协议详解:原理、用途与应用场景

1. SIP 协议简介 SIP(Session Initiation Protocol,会话初始化协议)是一个应用层协议,属于计算机网络的七层模型(OSI 模型)中的第七层。在计算机网络中,OSI 参考模型将网络通信划分为以下 7 层…

升级DDR5后,为何游戏性能不增反降?

随着 AMD Zen 4 CPU 开始彻底淘汰 DDR4,以及 Intel 12-14 代酷睿、酷睿Ultra系列全面支持 DDR5 内存。 我们不得不承认,属于 DDR5 内存的时代它已经来了! 相较前几年面世初期的价格高昂、性能拉胯、产品丰富度不足等,现如今DDR5内…

报表控件stimulsoft操作:使用 Angular 应用程序的报告查看器组件

Stimulsoft Ultimate (原Stimulsoft Reports.Ultimate)是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能,Stimulsoft Ultimate包含了…