Redisson: 是否考虑下支持Kotlin

Created on 29 Jan 2018  ·  4Comments  ·  Source: redisson/redisson

用JsonJacksonCodec来序列化的时候,当pojo对象为kotlin的时候,无法序列化,直接抛出异常

Most helpful comment

添加了kotlinModule后,如果仍然
提示 missing type id property '@class' at [Source: (io.netty.buffer.ByteBufInputStream); line: 1, column: 8]这个错误的话,说明是序列化时没有把class信息序列化。此时可以在kotlin class 中添加一个注解@JsonTypeInfo(use= JsonTypeInfo.Id.CLASS, property="@class") 这样就会把@class写入到属性中,在反序列化时就能取到这个值了。不过需要把以前存入redis的数据先del掉。不然仍然会因为读取不到@class属性而报错
snipaste_2018-02-08_12-31-54

All 4 comments

可以根据jackson-module-kotlin的介绍自行创建一个ObjectMapper来使用。

添加了kotlinModule后,如果仍然
提示 missing type id property '@class' at [Source: (io.netty.buffer.ByteBufInputStream); line: 1, column: 8]这个错误的话,说明是序列化时没有把class信息序列化。此时可以在kotlin class 中添加一个注解@JsonTypeInfo(use= JsonTypeInfo.Id.CLASS, property="@class") 这样就会把@class写入到属性中,在反序列化时就能取到这个值了。不过需要把以前存入redis的数据先del掉。不然仍然会因为读取不到@class属性而报错
snipaste_2018-02-08_12-31-54

I don't know what you guys talk about but you solved my issue! :))

我也遇见了同样的需求,为了帮助更多的kotlin爱好者,我将解决方案贴在这,
首先定义一个类,继承自JsonJacksonCodec:

class RedissonCodec : JsonJacksonCodec(ObjectMapper().registerModule(KotlinModule()))

然后把配置文件中的codec字段,换成这个类就好了.

Was this page helpful?
0 / 5 - 0 ratings