xueyiming 9 meses atrás
pai
commit
84d95e1fdc

+ 21 - 6
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/config/RedisTemplateConfig.java

@@ -1,5 +1,9 @@
 package com.tzld.longarticle.recommend.server.config;
 
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
 import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -12,6 +16,8 @@ import org.springframework.data.redis.connection.lettuce.LettuceClientConfigurat
 import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
 import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.RedisSerializer;
 import org.springframework.data.redis.serializer.StringRedisSerializer;
 
 @Configuration
@@ -39,7 +45,7 @@ public class RedisTemplateConfig {
     }
 
     @Bean(name = "redisTemplate")
-    public RedisTemplate<String, String> getRedisTemplate(@Qualifier("redisFactory") RedisConnectionFactory factory) {
+    public RedisTemplate<String, Object> getRedisTemplate(@Qualifier("redisFactory") RedisConnectionFactory factory) {
         return buildRedisTemplateByString(factory);
     }
 
@@ -49,15 +55,24 @@ public class RedisTemplateConfig {
      * @param factory
      * @return
      */
-    public RedisTemplate<String, String> buildRedisTemplateByString(RedisConnectionFactory factory) {
-        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
+    public RedisTemplate<String, Object> buildRedisTemplateByString(RedisConnectionFactory factory) {
+        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
         redisTemplate.setConnectionFactory(factory);
-        // key的序列化类型 保证可读性
+        redisTemplate.setValueSerializer(redisSerializer());
         redisTemplate.setKeySerializer(new StringRedisSerializer());
-        redisTemplate.setValueSerializer(new StringRedisSerializer());
         redisTemplate.setHashKeySerializer(new StringRedisSerializer());
-        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
+        redisTemplate.setHashValueSerializer(redisSerializer());
+        redisTemplate.afterPropertiesSet();
         return redisTemplate;
     }
 
+    public RedisSerializer<Object> redisSerializer() {
+        //创建JSON序列化器
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        //必须设置,否则无法序列化实体类对象
+        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL);
+        return new GenericJackson2JsonRedisSerializer(objectMapper);
+    }
+
 }

+ 4 - 4
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/exterior/impl/AccessTokenServiceImpl.java

@@ -19,18 +19,18 @@ public class AccessTokenServiceImpl implements AccessTokenService {
     private static final String ACCESS_TOKEN_LIST = "access_token_list";
 
     @Autowired
-    private RedisTemplate<String, String> redisTemplate;
+    private RedisTemplate<String, Object> redisTemplate;
 
     @Override
-    public AccessTokenVo getAccessToken(AccessTokenParam param) {
-        if(param == null || StringUtils.isEmpty(param.getSecret())){
+    public AccessTokenVo getAccessToken(AccessTokenParam param) throws RuntimeException {
+        if (param == null || StringUtils.isEmpty(param.getSecret())) {
             throw new RuntimeException("参数错误");
         }
         if (!SecretEnum.contains(param.getSecret())) {
             throw new RuntimeException("secret 不存在");
         }
         AccessTokenVo accessTokenVo = new AccessTokenVo();
-        String accessToken = redisTemplate.opsForValue().get(param.getSecret());
+        String accessToken = (String) redisTemplate.opsForValue().get(param.getSecret());
         if (StringUtils.isNotEmpty(accessToken)) {
             Long expire = redisTemplate.getExpire(param.getSecret(), TimeUnit.SECONDS);
             accessTokenVo.setAccessToken(accessToken);