您的位置:首页 > 娱乐 > 八卦 > 青岛建网站多少钱_上海建筑设计院_怎么做属于自己的网站_百度知道在线

青岛建网站多少钱_上海建筑设计院_怎么做属于自己的网站_百度知道在线

2025/3/11 8:51:20 来源:https://blog.csdn.net/gdjdjdj/article/details/146158270  浏览:    关键词:青岛建网站多少钱_上海建筑设计院_怎么做属于自己的网站_百度知道在线
青岛建网站多少钱_上海建筑设计院_怎么做属于自己的网站_百度知道在线

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com