001package io.freefair.spring.okhttp.client; 002 003import io.freefair.spring.okhttp.OkHttpUtils; 004import okhttp3.Response; 005import okhttp3.ResponseBody; 006import org.springframework.http.HttpHeaders; 007import org.springframework.http.HttpStatusCode; 008import org.springframework.http.client.ClientHttpResponse; 009import java.io.InputStream; 010 011/** 012 * OkHttp based {@link ClientHttpResponse} implementation. 013 * 014 * @author Lars Grefer 015 * @see OkHttpClientRequest 016 */ 017public class OkHttpClientResponse implements ClientHttpResponse { 018 private final Response okHttpResponse; 019 private HttpHeaders springHeaders; 020 021 @Override 022 public HttpStatusCode getStatusCode() { 023 return HttpStatusCode.valueOf(okHttpResponse.code()); 024 } 025 026 @Override 027 public String getStatusText() { 028 return okHttpResponse.message(); 029 } 030 031 @Override 032 public void close() { 033 ResponseBody body = okHttpResponse.body(); 034 if (body != null) { 035 body.close(); 036 } 037 } 038 039 @Override 040 public InputStream getBody() { 041 ResponseBody body = okHttpResponse.body(); 042 if (body != null) { 043 return body.byteStream(); 044 } else { 045 return InputStream.nullInputStream(); 046 } 047 } 048 049 @Override 050 public HttpHeaders getHeaders() { 051 if (springHeaders == null) { 052 springHeaders = OkHttpUtils.toSpringHeaders(okHttpResponse.headers()); 053 } 054 return springHeaders; 055 } 056 057 public OkHttpClientResponse(final Response okHttpResponse) { 058 this.okHttpResponse = okHttpResponse; 059 } 060}