背景:
调用mapper接口查询数据后,debug调试列表有数据
返回给前端或者通过swagger/postman发现响应没有数据,或者列表中属性都有值,但是返回的响应中某些属性没有值。
原因:
返回的结果对象(VO)中没有提供getter方法
解决方案:
为VO属性提供getter方法,不过一般都是用Lombok的@Data注解
原理:
通过查询的结果在返回给前端时,要将结果对象进行序列化,然后写入响应体返回给前端。说白话就是你查询的java结果对象肯定不能直接塞到http响应体中,前端收到后怎么解析呢,没法解析,所以你要将数据转换为http支持的主流数据格式,通常就是json格式,所以你返回给前端的数据要进行json序列化。序列化机制要求:必须通过getter方法暴露字段(字段私有)。以下是查询数据到响应前端的流程:
关于为什么不提供getter方法调试时却可以看到数据:调试器使用反射机制直接读取字段,可以突破private限制,而JSON序列化的过程是通过反射调用getter方法,所以没有getter方法就不行