在使用RestTemplate请求三方接口时:三方接口一般都要求在url后面拼接上固定的几个参数,一般如
accessToken
进行权限校验。而我们在开发时,请求这些地址,如何避免在url拼接accessToken
这种重复固定的编码操作呢。
方法当然有很多,本文提供一种通过反射偷梁换柱的写法来实现。
- 以微信小程序服务端接口请求作为请求对象。
- 微信小程序要求在请求时带上
?accesss_token=ACCESS_TOKEN
- 微信小程序要求在请求时带上
如何实现..?
# 基础配置
- 微信小程序配置类
/**
* 微信小程序配置类
*
* @author futao
* @date 2020/10/29
*/
@ConfigurationProperties(prefix = WxMiniProgramProperties.PROPERTY_PREFIX)
public class WxMiniProgramProperties {
/**
* 微信小程序配置前缀
*/
public static final String PROPERTY_PREFIX = Consts.System.FRAMEWORK_BASE_NAME + "." + Consts.WxMiniProgram.WX_MINI_PROGRAM_BASE_NAME;
/**
* AppID(小程序ID)
*/
private String appId;
/**
* AppSecret(小程序密钥)
*/
private String appSecret;
public String getAppId() {
if (StringUtils.isBlank(appId)) {
throw new WxMiniProgramException("微信小程序AppId未设置");
}
return appId;
}
public void setAppId(String appId) {
this.appId = appId;
}
public String getAppSecret() {
if (StringUtils.isBlank(appSecret)) {
throw new WxMiniProgramException("微信小程序AppSecret未设置");
}
return appSecret;
}
public void setAppSecret(String appSecret) {
this.appSecret = appSecret;
}
}
- 获取微信小程序accessToken
/**
* 微信小程序AccessToken
*
* @author futao
* @date 2020/10/29
*/
@Slf4j
@Service
public class AccessTokenServiceImpl implements AccessTokenService {
@Autowired
private StringRedisTemplate redisTemplate;
@Autowired
private WxMiniProgramProperties wxMiniProgramProperties;
/**
* 获取token
*
* @return token
*/
@Override
public String get() {
String redisAccessToken = redisTemplate.opsForValue().get(RedisKeyConsts.WxMiniProgram.WX_ACCESS_TOKEN);
if (StringUtils.isBlank(redisAccessToken)) {
//无缓