private JSONObject getToken() { JSONObject user = new JSONObject(); String s = redisTemplate.opsForValue().get("channelToken"); if (StringUtils.isNotBlank(s)) { try { String getTokenParam = "username=" + channelUser + "&password=" + channelPwd; user = JSON.parseObject(HttpUtils.doGet(getToken, getTokenParam, null)).getJSONObject("data"); redisTemplate.opsForValue().set("channelToken", user.toJSONString(), 60, TimeUnit.MINUTES); } catch (Exception e) { e.printStackTrace(); } } else { user = JSON.parseObject(s); } log.info("中台登录返回信息:{}", user); return user; }解释下代码并且检查下是否有bug
时间: 2024-02-14 14:09:57 浏览: 82
这段代码的功能是从Redis缓存中获取渠道的token,如果缓存中没有,则通过HTTP请求获取,并将获取到的token存入缓存中,并返回一个JSON对象。如果缓存中有,则直接从缓存中获取,并返回一个JSON对象。
代码中的bug可能是在缓存中有token的情况下,会直接返回一个空的JSON对象,因为第二个if语句中的赋值语句应该放在第一个if语句的else分支中。应该改成如下代码:
```
private JSONObject getToken() {
JSONObject user = new JSONObject();
String s = redisTemplate.opsForValue().get("channelToken");
if (StringUtils.isNotBlank(s)) {
user = JSON.parseObject(s);
} else {
try {
String getTokenParam = "username=" + channelUser + "&password=" + channelPwd;
user = JSON.parseObject(HttpUtils.doGet(getToken, getTokenParam, null)).getJSONObject("data");
redisTemplate.opsForValue().set("channelToken", user.toJSONString(), 60, TimeUnit.MINUTES);
} catch (Exception e) {
e.printStackTrace();
}
}
log.info("中台登录返回信息:{}", user);
return user;
}
```
这样修改后,在缓存中有token的情况下,会直接从缓存中获取并返回正确的JSON对象。
阅读全文