项目接口方法上使用了 @Cacheable 注解之后,返回值属性缺失了
对象结构如下:
@Data public class A { private String name; private int age; }
@Data public class B extends A implements Serializable { private String city; }
方法:
@Cacheable public B test(){ A a = new A(); a.setAge(11); a.setName("测试"); B b = new B(); BeanUtils.copyProperties(a,b); b.setCity("北京"); return b; }
预期每次调用返回的结果是
b.name="测试";
b.age=11;
b.city="北京";
但结果并不是这样子的,返回的结果只是
b.name=null
b.age=null;
b.city="北京";
这里大意了,对象A由于没有实现序列化导致这个结果错误,将对象A 实现序列化之后结果正常了
特此写文特殊记录下 (^・ェ・^)
@Cacheable 在查询到对象之后会对结果做一次序列化,由于A没有序列化,最后只是把B的结果给放到了缓存中
RedisCache类中会做这个操作 ,最后会对value序列化一下