<!-- # Call Rest Api by Retrofit2 --> <!-- call-rest-api-by-retrofit2 --> **功能:**通过 *Retrofit2* 调用远程 Api 。 这里以调用微信小游戏的获取 *access_token* 功能为例。 ## *pom.xml* 添加 *Retrofit* 相关依赖。 ```xml <!-- Retrofit --> <dependency> <groupId>com.squareup.retrofit2</groupId> <artifactId>retrofit</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.squareup.retrofit2</groupId> <artifactId>converter-simplexml</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.squareup.retrofit2</groupId> <artifactId>converter-jackson</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>logging-interceptor</artifactId> <version>3.12.0</version> </dependency> ``` ## *WxApi.java* 定义 Api 接口。 ```java import retrofit2.Call; import retrofit2.http.GET; import retrofit2.http.Query; public interface WxApi { /** * 小游戏 - 通过 code 获取 access_token * * @param appid 小程序唯一凭证,即 AppID,可在「微信公众平台 - 设置 - 开发设置」页中获得。(需要已经成为开发者,且帐号没有异常状态) * @param secret 小程序唯一凭证密钥,即 AppSecret,获取方式同 appid * @param code 登录时获取的 code * @param grantType 固定传入 client_credential * @return */ @GET("sns/jscode2session") Call<WxSessionResponse> jsCode2Session( @Query("appid") String appid, @Query("secret") String secret, @Query("js_code") String code, @Query("grant_type") String grantType); } ``` ## *WechatRetrofitConfigure.java* 创建 *wechatApiRetrofit* Bean 。 ```java import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; @Component public class WechatRetrofitConfigure { @Bean("wechatApiRetrofit") @ConditionalOnMissingBean(name = "wechatApiRetrofit") public Retrofit createWechatApiRetrofit() { return new Retrofit.Builder() .baseUrl("https://api.weixin.qq.com/") .addConverterFactory(JacksonConverterFactory.create()) .client(new OkHttpClient.Builder() .addInterceptor((new HttpLoggingInterceptor() .setLevel(HttpLoggingInterceptor.Level.BODY))) .build() ) .build(); } } ``` ## *WxServiceImpl.java* 调用时先通过 *wechatApiRetrofit* 创建 *WxApi* 的 *Call* 实例,之后通过调用其 *execute* 方法执行接口调用。 ```java import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import retrofit2.Call; import retrofit2.Response; import retrofit2.Retrofit; import java.io.IOException; /** * 微信服务 */ @RequiredArgsConstructor @Service @Slf4j public class WxServiceImpl implements WxService { private final Retrofit wechatApiRetrofit; @Override public WxSessionResponse jsCode2Session(String appid, String secret, String code, String clientCredential) { Call<WxSessionResponse> call = wechatApiRetrofit.create(WxApi.class) .jsCode2Session(appid, secret, code, clientCredential); Response<WxSessionResponse> retrofitResponse = null; try { retrofitResponse = call.execute(); } catch (IOException e) { log.error(e.getMessage(), e); } assert retrofitResponse != null; if (!retrofitResponse.isSuccessful()) { throw new RuntimeException("获取微信用户信息, 网络异常"); } return retrofitResponse.body(); } } ``` Loading... 版权声明:本文为博主「佳佳」的原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://www.liujiajia.me/2021/7/10/call-rest-api-by-retrofit2 提交