您的位置:首页 > 财经 > 金融 > 如何创建网站快捷方式到桌面_政府网站域名_网络营销推广公司名称_阿森纳英超积分

如何创建网站快捷方式到桌面_政府网站域名_网络营销推广公司名称_阿森纳英超积分

2025/2/23 5:23:07 来源:https://blog.csdn.net/weixin_46321761/article/details/144313450  浏览:    关键词:如何创建网站快捷方式到桌面_政府网站域名_网络营销推广公司名称_阿森纳英超积分
如何创建网站快捷方式到桌面_政府网站域名_网络营销推广公司名称_阿森纳英超积分

前情提要

在编写一个访问数据库的很简单的代码

明明运行成功,但是就是不出现数据

[{},{},{},{},{},{},{},{},{}]

排查思路

其实一般遇到数据库的问题都是排查数据库是否登陆;数据库链接是否正确;mybatis的映射是否正常;诸如此类的问题,但是我这都运行成功,所以没有这些问题,排除这些原因

所以改输出代码

log.info("测试结果:{}", (awards));

发现此时有结果,只不过是一些地址,

这也说明他确确实实找到数据,但是数据没有办法表示出来,所以就在json

JSON使用

log.info("测试结果:{}", awards);

这种方式时,日志框架会调用awards对象的toString()方法来输出日志信息。

awards列表中的每个Award对象的toString()方法返回的是对象的内存地址表示,不是俺想要的信息。

(不过这也说明他确确实实找到数据,但是数据没有办法表示出来,这是重点希望!!)

log.info("测试结果:{}", JSON.toJSONString(awards));

这种方式时,将awards对象转换成了JSON字符串,这样就能以更可读的方式输出对象的内容JSON.toJSONString(awards)会遍历awards列表中的每个Award对象,将对象的属性转换成JSON格式的字符串,这样就能在日志中看到每个对象的实际内容,而不仅仅是内存地址。

总结来说,问题在于toString()方法的实现和JSON序列化的区别:

  1. toString()方法:默认情况下,Java对象的toString()方法返回的是类名@对象哈希码的十六进制表示,这通常用于调试,而不是展示对象的实际内容。

  2. JSON序列化:将对象转换成JSON字符串,可以展示对象内部的实际数据,这对于日志记录和调试是非常有用的,因为它能让你看到对象的实际状态。

所以为啥我用JSON输出的就是数据内容,但是为啥我是空的呀

这通常意味着 Award 对象中的属性没有被正确序列化

序列化

没有正确序列化的原因有这些,

  1. 属性为NullAward 对象的属性可能为 null,导致序列化后显示为空对象。

  2. Getter方法问题Award 类中的属性可能没有对应的公共getter方法,或者getter方法返回的是不可序列化的值。

  3. 序列化配置问题:使用的JSON序列化库(如FastJSON、Jackson等)可能需要特定的配置来正确处理对象序列化。

  4. 循环引用Award 对象中可能存在指向自身的引用或者相互引用,导致序列化库无法正确处理。

  5. 忽略序列化Award 类或其属性可能被注解标记为在序列化时忽略。

  6. 属性类型不匹配Award 类中的属性类型可能与JSON序列化库期望的类型不匹配。

看到第二点我突然意识到我创建实体类的时候确实没有加上构造函数,所以人间从数据库找到数据了,但是没有办法转换为实体类,因为没有构造函数,啊啊啊啊!!!

为啥没有加上构造函数,因为我忽略@Data注释有构造函数的作用,我以为他是用来表示数据形式的,我只需要引入包就行了,为啥还加这个注释然后就给这个注释删掉了

啊啊啊啊啊啊啊啊啊啊,愚蠢的错误,错误的编码习惯,不要想当然,不懂的一定要查,不差这一会,一出现bug更浪费时间

@Data注释

@Data注解,它包含了@Getter@Setter@ToString@EqualsAndHashCode的功能。

不过也提醒我一点,构造实体类,一定写好构造函数,就用这个注释@Data

同时如果后面有需要进行实体类比较的操作,还需要重写equals函数

还有toString()函数也可以重写

啊啊啊啊这些东西就是知道了解但是从来没有在独立编码的时候想到

所以以后不懂就搜,没事就搜搜 ,积累积累积累,融会贯通

版权声明:

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

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