fastjson icon indicating copy to clipboard operation
fastjson copied to clipboard

class com.alibaba.fastjson.JSONObject cannot be cast to class cn.cai.domain.User (com.alibaba.fastjson.JSONObject and cn.cai.domain.User are in unnamed module of loader 'app')

Open caishenao opened this issue 3 years ago • 4 comments

依赖:

<dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>2.0.14</version>
  </dependency>
public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {

    public static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
    private final Class<T> clazz;

    public FastJsonRedisSerializer(Class<T> clazz) {
        super();
        this.clazz = clazz;
    }
     // 序列化
    @Override
    public byte[] serialize(T t) throws SerializationException {
        if (null == t) {
            return new byte[0];
        }
        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
    }
    // 反序列化
    @Override
    public T deserialize(byte[] bytes) throws SerializationException {
        if (null == bytes || bytes.length <= 0) {
            return null;
        }
        String str = new String(bytes, DEFAULT_CHARSET);
        return (T) JSON.parseObject(str, clazz);
    }
}

配置:

@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
        // 设置序列化
        //使用fastjson序列化
        FastJsonRedisSerializer<Object> fastJsonRedisSerializer = new FastJsonRedisSerializer<Object>(Object.class);
        // 配置redisTemplate
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        // 连接工厂
        redisTemplate.setConnectionFactory(lettuceConnectionFactory);
        //
        RedisSerializer<?> stringSerializer = new StringRedisSerializer();
        // key序列化
        redisTemplate.setKeySerializer(stringSerializer);
        // value序列化
        redisTemplate.setValueSerializer(fastJsonRedisSerializer);
        // Hash key序列化
        redisTemplate.setHashKeySerializer(stringSerializer);
        // Hash value序列化
        redisTemplate.setHashValueSerializer(fastJsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

反序列化时错误,小白,百度、谷歌都未解决

caishenao avatar Oct 17 '22 02:10 caishenao

https://github.com/alibaba/fastjson2/releases/tag/2.0.19 请用新版本验证,如果问题仍然存在,请在这里( https://github.com/alibaba/fastjson2/issues )提issue

wenshao avatar Nov 12 '22 13:11 wenshao

https://github.com/alibaba/fastjson2/releases/tag/2.0.19 请用新版本验证,如果问题仍然存在,请在这里( https://github.com/alibaba/fastjson2/issues )提issue

FastJsonRedisSerializer

@wenshao 认真的么,这个里面都没有这个 FastJsonRedisSerializer 类:

<dependency>
	<groupId>com.alibaba.fastjson2</groupId>
	<artifactId>fastjson2</artifactId>
	<version>2.0.19</version>
</dependency>

DistChen avatar Dec 31 '22 15:12 DistChen

@caishenao 改用 GenericFastJsonRedisSerializer 应该就没问题了。

DistChen avatar Dec 31 '22 15:12 DistChen

同样的问题

mdddj avatar Dec 29 '23 09:12 mdddj