功能: 通过 Feign 调用远程 Api 。
pom.xml
添加依赖 feign-jackson 和 feign-slf4j 。
<!-- Feign -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-jackson</artifactId>
<version>${feign.version}</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-slf4j</artifactId>
<version>${feign.version}</version>
<exclusions>
<exclusion>
<artifactId>feign-core</artifactId>
<groupId>io.github.openfeign</groupId>
</exclusion>
</exclusions>
</dependency>
AresApi.java
定义 Api 接口。
import feign.Headers;
import feign.Param;
import feign.RequestLine;
import java.util.Map;
public interface AresApi {
/**
* 获取微信公众号 Access Token
*
* @param appid
* @return
*/
@RequestLine("GET /token?appid={appid}")
AresResponse<AresAccessTokenData> getAccessToken(@Param("appid") String wAppid);
}
AresApiConfig.java
使用 Feign.builder() 创建 Api 的 Bean 。
import feign.Feign;
import feign.jackson.JacksonDecoder;
import feign.jackson.JacksonEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AresApiConfig {
@Bean
public AresApi createAresApi(AresConfig aresConfig) {
return Feign.builder()
.encoder(new JacksonEncoder())
.decoder(new JacksonDecoder())
.target(AresApi.class, String.format("http://%s/", aresConfig.getDomain()));
}
}
AresServiceImpl.java
调用方法同调用普通的服务接口一样。
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
@Slf4j
public class AresServiceImpl extends AbstractAresService {
@Autowired
private AresApi aresApi;
/**
* 获取微信公众号访问令牌
*
* @param appId 微信公众号应用ID
* @return
*/
@Override
public AresAccessTokenData getAccessToken(String appId) {
AresResponse<AresAccessTokenData> response = aresApi.getAccessToken(appId);
log.info("response : {}", JSONUtil.toJsonStr(response));
if (response != null && response.getCode() != null && response.getCode() == 200) {
return response.getData();
} else {
log.error("获取 Access Token 失败");
return null;
}
}
}
版权声明:本文为博主「佳佳」的原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:www.liujiajia.me/2021/7/10/c…