dubbo泛化调用时transient字段失效问题
工作中发现dubbo泛化调用时结果类中的某个字段即使已经用transient修饰了,但是前端还是会有该字段展示,探究了原因如下:
- 如果是走的泛化调用,会通过genericFilter和genericImplFilter两个类来处理序列化和反序列化,会先将结果变成map对象,然后调用底层的hessian2协议,变成map对象时使用的是PojoUtils中的generalize方法,通过读取get方法来组装map对象,不管transient字段,然后调用底层的hessian2协议后也就跟transient无关了
- 如果走的是正常rpc调用,生成的结果在dubboCodec类中进行序列化时会走到hessian2的Hessian2Output类中的writeObject的getSerializer生成javaSerializer,在javaSerializer的构造方法中会检测字段是否有transient,有的话就不会生成该字段的序列化器,达到transient的目的