项目接口方法上使用了 @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序列化一下


探讨@Cacheable注解使用中遇到的对象属性缺失问题,解析原因在于未实现序列化的对象被缓存时发生的异常行为,并提供了解决方案。
2万+

被折叠的 条评论
为什么被折叠?



