首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bean访问器的Genson缓存

Bean访问器的Genson缓存
EN

Stack Overflow用户
提问于 2015-11-16 12:09:48
回答 1查看 58关注 0票数 1

我最近升级到Genson1.3,我不确定这个问题是新的还是不像以前一样,我修补了0.98版本,使其工作。

上下文

我们正在使用我们自己的BeanMutatorAccessorResolver实现。这样我们就可以动态地决定是否应该序列化一个属性。基本上,我们已经将Genson集成到了我们的通用泽西REST接口中。Genson执行所有的序列化和反序列化。在执行GET请求时,用户可以传递URL中的字段,以便筛选他特别需要的字段(特别是对于大型对象,这是必要的,因为您只需要3个左右字段来显示表概述)。例如:?fields=field1,field2,field3。然后,我们在BeanMutatorAccessorResolver的实现中确切地知道要序列化哪些字段和忽略哪些字段。这主要是为了加速请求和解析,因为那时我们处理的数据较少。

问题

不幸的是,一旦Genson通过反射或其他方式阅读了所有字段,它就会缓存这一点。如果我们总是请求相同的字段,这就没有问题了。不幸的是,在某些情况下,我们需要比以前更多的字段,但是由于Genson没有第二次访问我们的BeanMutatorAccessorResolver,所以它只返回它已经缓存的几个字段。

不管怎么说,这附近有吗?也许有一个更好的解决方案,比完全关闭歌舞-因为这很可能会损害性能,对吗?

更新

似乎我已经找到了发生这件事的地点。基本上,Genson返回Genson.provideConverter(Type forType)中缓存的转换器(行: 154)。

代码语言:javascript
复制
Converter<T> converter = (Converter<T>) converterCache.get(forType);

在这个方法的顶部,我注意到它正在寻找一个__GENSON$DO_NOT_CACHE_CONVERTER。

代码语言:javascript
复制
if (Boolean.TRUE.equals(ThreadLocalHolder.get("__GENSON$DO_NOT_CACHE_CONVERTER", Boolean.class))) {

也许我应该设置这个值,还是有更好的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2015-11-16 23:20:29

多亏了尤金,这个问题已经解决了。解决方案可以在这里找到:https://groups.google.com/forum/#!topic/genson/Z1oFHJfA-5w

基本上,您需要扩展3个类来实现这个功能:

  1. GensonBundle,您可以向GensonBuilder注册。
  2. BaseBeanDescriptorProvider,它是用GensonBundle创建的。
  3. BeanDescriptor,它是在BaseBeanDescriptorProvider中创建的,它包含适合您需要的序列化方法。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33735036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档