jfinal 越来越流行, jfinal的redis插件默认的序列化方式是fst。 但是系统中其他项目中用的是spring data redis中的StringRedisTemplate,所有的value都是通过gson转化成String放进去的。

直接用jfinal的redis插件去取的话会出现错误。所以需要对默认序列化方式进行修改。

代码很简单, 如下:

// 添加 redis 插件        
RedisPlugin redisPlugin = new RedisPlugin("xxx", "localhost");
redisPlugin.setSerializer(new ISerializer() {            
    @Override
    public byte[] keyToBytes(String key) {
        return SafeEncoder.encode(key);            
    }            
    @Override            
    public String keyFromBytes(byte[] bytes) {                
        return SafeEncoder.encode(bytes);            
    }            
    @Override            
    public byte[] fieldToBytes(Object field) {                
        return valueToBytes(field);            
    }            
    @Override            
    public Object fieldFromBytes(byte[] bytes) {                
        return valueFromBytes(bytes);            
    }            
    @Override            
    public byte[] valueToBytes(Object value) {                
        return SafeEncoder.encode(value.toString());            
    }            
    @Override            
    public Object valueFromBytes(byte[] bytes) {                
        if(bytes == null || bytes.length == 0)                    
            return null;                
        return SafeEncoder.encode(bytes);            
    }        
});

代码很简单, 所以直接在config类里面就写了。 有特殊需求的同学可以根据这个思想继续发挥。