Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

注解类型支持 #895

Open
Fixfly-SS opened this issue Jun 24, 2024 · 5 comments
Open

注解类型支持 #895

Fixfly-SS opened this issue Jun 24, 2024 · 5 comments

Comments

@Fixfly-SS
Copy link

Fixfly-SS commented Jun 24, 2024

以json序列化方式举例
如果使用注解的方式的时候, 可以注解里定义 序列化的class,或者根据方法返回类型确定要序列化的类型, 这样序列化的时候,就可以不写入类信息, 反序列化的时候也可以确定类型

@areyouok
Copy link
Collaborator

类里面嵌套的对象类型怎么指定呢?

@Fixfly-SS
Copy link
Author

Fixfly-SS commented Jul 4, 2024

类里面嵌套的对象类型怎么指定呢?

对象里嵌套对象的类型 不需要指定, json 序列化和反序列化 都不需要指定内层嵌套对象的类型,
比如 AA.class 里 有BB.class 类型的嵌套对象, 序列化和反序列化工具都可以自动处理, 通过AA.class 反射也可以拿到BB.class

当然 如果缓存的第一层对象是List 这种类型 , 可能确实要指定两个类型 List.class 和 AA.class 再内层就不需要指定了

@areyouok
Copy link
Collaborator

areyouok commented Jul 5, 2024

没那么简单,都不用List,Object类型字段就搞不定,实际可以是类A,也可以是类B

@Fixfly-SS
Copy link
Author

没那么简单,都不用List,Object类型字段就搞不定,实际可以是类A,也可以是类B

一般嵌套对象,类型不确定的情况相对少一些,或者针对这种无法简单反序列化的情况,注解里可以注入自定义反序列化的class, 就是框架 只提供相对简单类型的处理方案, 如果缓存的对象 过于复杂, 可以自己指定反序列化处理器,自己处理,不知道这样是否可行, 毕竟写入类信息这种方式, 一单重命名一下 就失效了, 甚至引发错误

@areyouok
Copy link
Collaborator

你这样也解决不了所有的问题,默认内置的话一定会有无数人来问,说怎么有这么大坑的,我不干这事。

但你可以自己搞,反序列化器可以自己扩展的。定义SpringConfigProvider的时候,注入自己的encoderParser,你自己定义个DefaultEncoderParser,把parseDecoder覆盖一下就好了(你需要传参数给它,所以DefaultSpringEncoderParser也解决不了你的问题)。最后大概写这样:

@Cached(... serialPolicy = "myjson?class=com.xxx.MyClass")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants