io.github.robertograham.fortniteapirestclient.util.ResponseHandlerProvider Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fortnite-api-rest-client Show documentation
Show all versions of fortnite-api-rest-client Show documentation
Provides access to the Fortnite REST API
package io.github.robertograham.fortniteapirestclient.util;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.util.EntityUtils;
public class ResponseHandlerProvider {
private final ObjectMapper objectMapper;
private final ResponseHandler stringResponseHandler;
ResponseHandlerProvider(ObjectMapper objectMapper) {
this.objectMapper = objectMapper;
this.stringResponseHandler = stringResponseHandler();
}
public static ResponseHandlerProviderBuilder builder() {
return new ResponseHandlerProviderBuilder();
}
private ResponseHandler stringResponseHandler() {
return response -> {
HttpEntity entity = response.getEntity();
String body = entity != null ? EntityUtils.toString(entity) : null;
int status = response.getStatusLine().getStatusCode();
if (status >= 200 && status < 300)
return body;
else
throw body != null ?
new FortniteApiErrorException(objectMapper.readValue(body, FortniteApiError.class), status)
: new ClientProtocolException("Unexpected response status: " + status);
};
}
public ResponseHandler handlerFor(Class clazz) {
return response -> objectMapper.readValue(stringResponseHandler.handleResponse(response), clazz);
}
public ResponseHandler stringHandler() {
return stringResponseHandler;
}
}