如图序列化无法识别List中的泛型,只能拿到结果后再次序列化。有没有更好的方式解决这个问题
wqsoz72f1#
方法就是不要用json做序列化
j9per5c42#
有具体方案吗?
9avjhtql3#
1.使用Jackson2序列化时会记录类型信息, 但是报文会很大.2. 编程式的方式,你可以手动创建Cache对象,并且自己指定好对应的序列化和反序列化编解码,不使用统一的json序列化,因为无法顾及到所有的情况,应该由编写的人自己来解决
可参考:
QuickConfig systemConfigCacheConfig = QuickConfig.newBuilder("test", "system:config:").expire(Duration.ofSeconds(86410)).cacheType(CacheType.REMOTE)// 自己序列化.valueEncoder(JacksonUtils::objectToByteArray)// 自己反序列化.valueDecoder((bytes)-> JacksonUtils.byteArrayToObject(bytes, new TypeReference() {})).build();Cache<String, SystemConfigDTO> cache = cacheManager.getOrCreateCache(systemConfigCacheConfig);
3条答案
按热度按时间wqsoz72f1#
方法就是不要用json做序列化
j9per5c42#
方法就是不要用json做序列化
有具体方案吗?
9avjhtql3#
方法就是不要用json做序列化
有具体方案吗?
1.使用Jackson2序列化时会记录类型信息, 但是报文会很大.
2. 编程式的方式,你可以手动创建Cache对象,并且自己指定好对应的序列化和反序列化编解码,不使用统一的json序列化,因为无法顾及到所有的情况,应该由编写的人自己来解决
可参考:
QuickConfig systemConfigCacheConfig = QuickConfig
.newBuilder("test", "system:config:")
.expire(Duration.ofSeconds(86410))
.cacheType(CacheType.REMOTE)
// 自己序列化
.valueEncoder(JacksonUtils::objectToByteArray)
// 自己反序列化
.valueDecoder((bytes)-> JacksonUtils.byteArrayToObject(bytes, new TypeReference() {}))
.build();
Cache<String, SystemConfigDTO> cache = cacheManager.getOrCreateCache(systemConfigCacheConfig);