先要添加pom依赖
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</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.retrofit2</groupId>
<artifactId>converter-scalars</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>logging-interceptor</artifactId>
<version>3.14.9</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.14.9</version>
</dependency>
添加RetrofitConfig
@Configuration
@Slf4j
public class RetrofitConfig {
@Value("${retrofit.backendUrl:}")
private String backendUrl ;
@Bean
public BackendClient backendClient() {
return this.build(backendUrl, BackendClient.class);
}
;
private OkHttpClient retrofitOkHttpClient;
private <T> T build(String baseUrl, Class<T> type) {
OkHttpClient client = getRetrofitOkHttpClient();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(JacksonConverterFactory.create((new ObjectMapper())
.registerModule((Module) new ParameterNamesModule())
.registerModule((Module) new Jdk8Module())
.registerModule((Module) new JavaTimeModule())))
.client(client)
.build();
return retrofit.create(type);
}
private synchronized OkHttpClient getRetrofitOkHttpClient() {
if (retrofitOkHttpClient == null) {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor(log::info);
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
retrofitOkHttpClient = new OkHttpClient.Builder()
.addInterceptor(logging)
.connectTimeout(180, TimeUnit.SECONDS)
.readTimeout(180, TimeUnit.SECONDS)
.build();
}
return retrofitOkHttpClient;
}
}
编写请求类
public interface BackendClient {
@GET("/queryForThird")
Call<JSONObject> queryForThird();
}
调用时直接注入BackendClient即可直接使用,如下:
backendClient.queryForThird().execute().body();