if (StringUtil.isBlank(redisData)) { // 缓存中不存在access_token // response = WxMessageUtil.getInstance().getToken(globalConfig, globalConfig.getAppId(), globalConfig.getAppSecret()); response = wxService.getToken(globalConfig.getAppId(), globalConfig.getAppSecret()); if (response == null) { return apiResponse; } // 设置key、value值 redisTemplate.opsForValue().set(token_cache_key, JSON.toJSONString(response), response.getExpires_in(), TimeUnit.SECONDS); // strings.set(KEY_PREFIX + Const.APP_ID, JSON.toJSONString(response)); // 设置key有效期 // keys.expired(KEY_PREFIX + Const.APP_ID, response.getExpires_in()); expiresIn = response.getExpires_in(); } else { response = JSON.parseObject(redisData, WxMessageTokenResponse.class); // expiresIn = keys.ttl(KEY_PREFIX + Const.APP_ID); expiresIn = redisTemplate.getExpire(token_cache_key, TimeUnit.SECONDS); } if (response != null) { apiResponse.setAccessToken(response.getAccess_token()); if (expiresIn > 60) { expiresIn = expiresIn - 60; } else { expiresIn = 0; } apiResponse.setExpiresIn(String.valueOf(expiresIn)); }
时间: 2024-02-14 21:32:35 浏览: 125
根据你提供的代码片段,这段代码是一个条件语句,用于获取和设置 access_token 的逻辑。
首先,它检查 `redisData` 是否为空或空白(使用了一个叫做 `StringUtil.isBlank()` 的方法)。如果为空,表示缓存中不存在 access_token。
在这种情况下,代码会调用 `wxService.getToken()` 方法从微信服务器获取 access_token。如果返回的 `response` 对象为 null,则返回一个 `apiResponse` 对象(可能是一个自定义的 API 响应对象)。
如果成功获取到 `response` 对象,则将其转换为 JSON 字符串,并使用 `redisTemplate.opsForValue().set()` 方法将其存储在缓存中。同时,还会设置存储的键为 `token_cache_key`,并设定过期时间为 `response.getExpires_in()` 秒。然后,将 `response.getExpires_in()` 的值赋给变量 `expiresIn`。
如果 `redisData` 不为空,则说明缓存中存在 access_token。此时,代码会将 `redisData` 解析为 `WxMessageTokenResponse` 对象,并将过期时间赋给 `expiresIn`,通过调用 `redisTemplate.getExpire()` 方法获取。
接下来,如果 `response` 不为 null,则将其中的 `access_token` 赋值给 `apiResponse` 的对应属性。同时,首先判断 `expiresIn` 是否大于 60,如果大于,则将其减去 60;否则,将其设为 0。最后,将 `expiresIn` 的值转换为字符串,赋给 `apiResponse` 的对应属性。
需要注意的是,具体的实现细节可能涉及到其他类或方法,如 `WxMessageUtil.getInstance().getToken()`、`JSON.toJSONString()`、`keys.expired()` 和 `apiResponse` 的相关实现。
阅读全文