Java源码示例:retrofit2.Converter.Factory

示例1
@Test
public void testJspoonConverterAllowsRetrofitToChooseAnotherConverter() throws Exception {
    MockWebServer server = new MockWebServer();
    server.enqueue(new MockResponse().setBody("Ahoy matey!"));

    Converter mockConverter = mock(Converter.class);
    when(mockConverter.convert(any(ResponseBody.class)))
        .thenReturn(new Item("1", "Item 1"));

    Factory mockConverterFactory = mock(Factory.class);
    when(mockConverterFactory.responseBodyConverter(
        any(Type.class),
        any(Annotation[].class),
        any(Retrofit.class))).thenReturn(mockConverter);

    NonScrapingService service = new Builder()
        .baseUrl(server.url("/"))
        .addConverterFactory(JspoonConverterFactory.create())
        .addConverterFactory(mockConverterFactory)
        .build()
        .create(NonScrapingService.class);
    Item item = service.getItem("1").execute().body();
    assertEquals(item.id, "1");
    assertEquals(item.name, "Item 1");

    verify(mockConverter, atLeastOnce()).convert(any(ResponseBody.class));
}
 
示例2
private Retrofit.Builder createRetrofit(Factory factory) {
    return new Retrofit.Builder()
            .baseUrl("https://fcm.googleapis.com/fcm/")
            .client(httpClient)
            .addConverterFactory(factory);
}
 
示例3
/**
 * Constructs a new {@code InfluxDBImpl}.
 *
 * @param url
 *          The InfluxDB server API URL
 * @param username
 *          The InfluxDB user name
 * @param password
 *          The InfluxDB user password
 * @param okHttpBuilder
 *          The OkHttp Client Builder
 * @param retrofitBuilder
 *          The Retrofit Builder
 * @param responseFormat
 *          The {@code ResponseFormat} to use for response from InfluxDB
 *          server
 */
public InfluxDBImpl(final String url, final String username, final String password,
                    final OkHttpClient.Builder okHttpBuilder, final Retrofit.Builder retrofitBuilder,
                    final ResponseFormat responseFormat) {
  this.messagePack = ResponseFormat.MSGPACK.equals(responseFormat);
  this.hostName = parseHost(url);

  this.loggingInterceptor = new HttpLoggingInterceptor();
  setLogLevel(LOG_LEVEL);

  this.gzipRequestInterceptor = new GzipRequestInterceptor();
  OkHttpClient.Builder clonedOkHttpBuilder = okHttpBuilder.build().newBuilder()
          .addInterceptor(loggingInterceptor)
          .addInterceptor(gzipRequestInterceptor);
  if (username != null && password != null) {
    clonedOkHttpBuilder.addInterceptor(new BasicAuthInterceptor(username, password));
  }
  Factory converterFactory = null;
  switch (responseFormat) {
  case MSGPACK:
    clonedOkHttpBuilder.addInterceptor(chain -> {
      Request request = chain.request().newBuilder().addHeader("Accept", APPLICATION_MSGPACK).build();
      return chain.proceed(request);
    });

    converterFactory = MessagePackConverterFactory.create();
    chunkProccesor = new MessagePackChunkProccesor();
    break;
  case JSON:
  default:
    converterFactory = MoshiConverterFactory.create();

    Moshi moshi = new Moshi.Builder().build();
    JsonAdapter<QueryResult> adapter = moshi.adapter(QueryResult.class);
    chunkProccesor = new JSONChunkProccesor(adapter);
    break;
  }

  this.client = clonedOkHttpBuilder.build();
  Retrofit.Builder clonedRetrofitBuilder = retrofitBuilder.baseUrl(url).build().newBuilder();
  this.retrofit = clonedRetrofitBuilder.client(this.client)
          .addConverterFactory(converterFactory).build();
  this.influxDBService = this.retrofit.create(InfluxDBService.class);

}