All Downloads are FREE. Search and download functionalities are using the official Maven repository.

dev.soffa.foundation.commons.http.DefaultHttpClient Maven / Gradle / Ivy

package dev.soffa.foundation.commons.http;

import dev.soffa.foundation.commons.Mappers;
import dev.soffa.foundation.error.TechnicalException;
import lombok.SneakyThrows;
import okhttp3.*;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

public class DefaultHttpClient implements HttpClient {


    private static DefaultHttpClient defaultInstance = new DefaultHttpClient();
    private final OkHttpClient client;

    public DefaultHttpClient() {
        client = HttpUtil.newOkHttpClient();
    }

    public DefaultHttpClient(OkHttpClient client) {
        this.client = client;
    }

    public static DefaultHttpClient getInstance() {
        return defaultInstance;
    }

    public void setDefaultInstance(DefaultHttpClient instance) {
        defaultInstance = instance;
    }

    @SneakyThrows
    @Override
    public HttpResponse request(HttpRequest req) {
        RequestBody body = null;

        if (req.getBody() != null) {
            Object b = req.getBody();
            if (b instanceof String) {
                body = RequestBody.create((String) b, MediaType.parse(req.getContentType()));
            } else if (req.getContentType() == null || req.getContentType().contains("json")) {
                body = RequestBody.create(Mappers.JSON.serialize(req.getBody()), MediaType.parse(req.getContentType()));
            } else {
                throw new TechnicalException("Content type not supported: %s", req.getContentType());
            }
        }

        Map hds = Optional.ofNullable(req.getHeaders()).orElse(new HashMap<>());
        hds.put("Content-Type", req.getContentType());
        Headers headers = Headers.of(hds);
        Request request = new Request.Builder()
            .url(req.getUrl())
            .method(req.getMethod(), body)
            .headers(headers)
            .build();
        Call call = client.newCall(request);
        try (Response result = call.execute()) {
            HttpResponse.HttpResponseBuilder res = HttpResponse.builder()
                .status(result.code())
                .message(result.message());
            try (ResponseBody responseBody = result.body()) {
                if (responseBody != null) {
                    MediaType contenType = responseBody.contentType();
                    if (contenType != null) {
                        res.contentType(contenType.type() + "/" + contenType.subtype());
                    }
                    res.body(responseBody.string());
                }
            }
            return res.build();
        }
    }


    /*
    public HttpResponse get(String url) {
        return this.request(HttpRequest.get(url));
    }

    public HttpResponse post(String url) {
        return request(HttpRequest.post(url));
    }

    public HttpResponse post(String url, Object body) {
        return request(HttpRequest.post(url, body));
    }

    public HttpResponse put(String url) {
        return request(HttpRequest.put(url));
    }

    public HttpResponse put(String url, Object body) {
        return request(HttpRequest.put(url, body));
    }

    public HttpResponse patch(String url) {
        return request(HttpRequest.patch(url));
    }

    public HttpResponse patch(String url, Object body) {
        return request(HttpRequest.patch(url, body));
    }

    public HttpResponse delete(String url) {
        return request(HttpRequest.delete(url));
    }

    public HttpResponse delete(String url, Object body) {
        return request(HttpRequest.delete(url, body));
    }


     */

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy