content: package com.alibaba.fastjson.support.spring;
  
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.support.config.FastJsonConfig;
  import org.springframework.data.redis.serializer.RedisSerializer;
  import org.springframework.data.redis.serializer.SerializationException;
  
  /**
   * {@link RedisSerializer} FastJson Impl
   *
   * @author lihengming
   * @author Victor.Zxy
   * @since 1.2.36
   */
  public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {
      private FastJsonConfig fastJsonConfig = new FastJsonConfig();
      private Class<T> type;
  
      public FastJsonRedisSerializer(Class<T> type) {
          this.type = type;
      }
  
      public FastJsonConfig getFastJsonConfig() {
          return fastJsonConfig;
      }
  
      public void setFastJsonConfig(FastJsonConfig fastJsonConfig) {
          this.fastJsonConfig = fastJsonConfig;
      }
  
      @Override
      public byte[] serialize(T t) throws SerializationException {
          if (t == null) {
              return new byte[0];
          }
          try {
              return JSON.toJSONBytesWithFastJsonConfig(
                      fastJsonConfig.getCharset(),
                      t,
                      fastJsonConfig.getSerializeConfig(),
                      fastJsonConfig.getSerializeFilters(),
                      fastJsonConfig.getDateFormat(),
                      JSON.DEFAULT_GENERATE_FEATURE,
                      fastJsonConfig.getSerializerFeatures()
              );
          } catch (Exception ex) {
              throw new SerializationException("Could not serialize: " + ex.getMessage(), ex);
          }
      }
  
      @Override
      public T deserialize(byte[] bytes) throws SerializationException {
          if (bytes == null || bytes.length == 0) {
              return null;
          }
          try {
              return (T) JSON.parseObject(
                      bytes,
                      fastJsonConfig.getCharset(),
                      type,
                      fastJsonConfig.getParserConfig(),
                      fastJsonConfig.getParseProcess(),
                      JSON.DEFAULT_PARSER_FEATURE,
                      fastJsonConfig.getFeatures()
              );
          } catch (Exception ex) {
              throw new SerializationException("Could not deserialize: " + ex.getMessage(), ex);
          }
      }
  }
  