目录
bug求助
一、遇到问题
在运行项目代码的时候,发现数据请求不到
错误特征一
黄色的是定位到报错的具体字段
org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Conflicting getter definitions for property "sno": org.qust.entity.BaseInfo#getSno(0 params) vs org.qust.entity.BaseInfo#getsno(0 params); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Conflicting getter definitions for property "sno": org.qust.entity.BaseInfo#getSno(0 params) vs org.qust.entity.BaseInfo#getsno(0 params) (through reference chain: org.qust.common.Result["data"]->org.qust.common.PageResult["rows"]->java.util.Collections$UnmodifiableRandomAccessList[0])
错误特征二
atorg.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal
具体表现
二、 出现问题的原因
出现这个问题的原因是JSON的原因。就是在实体属性类里面有两个get方法冲突了,要把其中一个加上注解来让调用的方法或者类那些区分开来。
这个错误消息表明在尝试将 Java 对象转换为 JSON 格式时,出现了冲突的 getter 方法定义。错误消息的根本问题是:在您的 Java 类 org.qust.entity.BaseInfo
中,存在两个具有不同命名的 getter 方法来获取属性 "sno" 的值,这导致了冲突。
详解:
这个错误消息表示在使用 Jackson 库将 Java 对象转换为 JSON 格式时发生了问题,因为它检测到了属性 "sno" 存在多个冲突的 getter 方法,这些方法的命名方式不一致。具体来说,它发现了以下两个方法:
org.qust.entity.BaseInfo#getSno(0 params)
org.qust.entity.BaseInfo#getsno(0 params)
Jackson 库通常会根据 JavaBean 规范来识别 getter 方法,以确定如何从对象中提取属性的值。在 JavaBean 规范中,getter 方法的命名约定是以 "get" 开头,后面跟着属性的名称,首字母大写。例如,属性 "sno" 的 getter 方法应该命名为
getSno
。由于您的 Java 类中存在两个具有不同命名的 getter 方法,即
getSno
和getsno
,Jackson 不知道应该使用哪个来获取 "sno" 属性的值,因此发生了冲突。要解决这个问题,您可以采取以下步骤之一:
重命名方法: 将其中一个 getter 方法的名称修改为符合 JavaBean 命名约定的格式,例如将
getsno
改为getSno
。使用注解: 使用 Jackson 提供的注解来明确告诉 Jackson 应该使用哪个 getter 方法来访问属性。例如,您可以使用
@JsonProperty
注解来指定属性的名称,以及要使用的 getter 方法的名称。选择哪种方法取决于您的项目需求和代码结构,但目标是确保只有一个适当命名的 getter 方法来访问属性 "sno"。
三、解决办法
1.在实体属性类的get方法上面加上@JsonIgnore这个注解
具体是哪个类呢?那就看报错信息里面的字段,根据字段去找是哪个实体类
具体是什么方法呢?那就是在相同的get方法上面试试,这两个方法一个命名大写,一个命名小写,调用的方法就不知道调用的是哪个,那就用注解来帮忙区分就好了
ps:一般报Could not write JSON这个错误,都可以通过加这个注解去解决
@JsonIgnore
2.解决成功
有什么问题都可以评论区留言,看见都会回复的
如果你觉得本篇文章对你有所帮助的,把“文章有帮助的”打在评论区
多多支持吧!!!
点赞收藏评论