Search in sources :

Example 1 with OnProgress

use of com.dtflys.forest.callback.OnProgress in project forest by dromara.

the class ForestMethod method makeRequest.

/**
 * 创建请求
 * @param args 调用本对象对应方法时传入的参数数组
 * @return Forest请求对象,{@link ForestRequest}类实例
 */
private ForestRequest makeRequest(Object[] args) {
    MetaRequest baseMetaRequest = interfaceProxyHandler.getBaseMetaRequest();
    ForestURL baseURL = null;
    ForestQueryMap queries = new ForestQueryMap();
    if (baseUrlTemplate != null) {
        baseURL = baseUrlTemplate.render(args, queries);
    }
    if (urlTemplate == null) {
        throw new ForestRuntimeException("request URL is empty");
    }
    ForestURL renderedURL = urlTemplate.render(args, queries);
    ForestRequestType type = type(args);
    String baseContentEncoding = null;
    if (baseEncodeTemplate != null) {
        baseContentEncoding = baseEncodeTemplate.render(args);
    }
    String contentEncoding = null;
    if (encodeTemplate != null) {
        contentEncoding = encodeTemplate.render(args);
    }
    String baseContentType = null;
    if (baseContentTypeTemplate != null) {
        baseContentType = baseContentTypeTemplate.render(args);
    }
    String baseUserAgent = null;
    if (baseUserAgentTemplate != null) {
        baseUserAgent = baseUserAgentTemplate.render(args);
    }
    String charset = null;
    String renderedCharset = charsetTemplate.render(args);
    if (StringUtils.isNotBlank(renderedCharset)) {
        charset = renderedCharset;
    } else if (baseCharsetTemplate != null) {
        charset = baseCharsetTemplate.render(args);
    } else if (StringUtils.isNotBlank(configuration.getCharset())) {
        charset = configuration.getCharset();
    }
    String responseEncoding = null;
    if (responseEncodingTemplate != null) {
        responseEncoding = responseEncodingTemplate.render(args);
    }
    String sslProtocol = null;
    String renderedSslProtocol = sslProtocolTemplate.render(args);
    if (StringUtils.isNotBlank(renderedSslProtocol)) {
        sslProtocol = renderedSslProtocol;
    } else if (baseSslProtocolTemplate != null) {
        sslProtocol = baseSslProtocolTemplate.render(args);
    } else {
        sslProtocol = configuration.getSslProtocol();
    }
    String renderedContentType = null;
    if (contentTypeTemplate != null) {
        renderedContentType = contentTypeTemplate.render(args).trim();
    }
    String renderedUserAgent = null;
    if (userAgentTemplate != null) {
        renderedUserAgent = userAgentTemplate.render(args).trim();
    }
    List<RequestNameValue> nameValueList = new ArrayList<>();
    String[] headerArray = baseMetaRequest.getHeaders();
    MappingTemplate[] baseHeaders = null;
    if (headerArray != null && headerArray.length > 0) {
        baseHeaders = new MappingTemplate[headerArray.length];
        for (int j = 0; j < baseHeaders.length; j++) {
            MappingTemplate header = new MappingTemplate(BaseRequest.class, "headers", this, headerArray[j], this, configuration.getProperties(), forestParameters);
            baseHeaders[j] = header;
        }
    }
    AddressSource addressSource = configuration.getBaseAddressSource();
    ForestAddress address = configuration.getBaseAddress();
    if (address == null) {
        // 默认根地址
        address = DEFAULT_ADDRESS;
    }
    ForestURL addressURL = null;
    if (baseURL != null) {
        renderedURL.setBaseURL(baseURL);
    }
    try {
        addressURL = new ForestURL(new URL("http://localhost"));
        addressURL.setBaseAddress(address);
        renderedURL = renderedURL.mergeURLWith(addressURL);
    } catch (MalformedURLException e) {
        throw new ForestRuntimeException(e);
    }
    boolean autoRedirection = configuration.isAutoRedirection();
    String bodyTypeName = "text";
    if (bodyTypeTemplate != null) {
        bodyTypeName = bodyTypeTemplate.render(args);
    }
    ForestDataType bodyType = ForestDataType.findByName(bodyTypeName);
    // createExecutor and initialize http instance
    ForestRequest<T> request = new ForestRequest(configuration, this, args);
    request.url(renderedURL).type(type).bodyType(bodyType).addAllQuery(queries).charset(charset).autoRedirects(autoRedirection).setSslProtocol(sslProtocol).setLogConfiguration(logConfiguration).setAsync(async);
    if (addressSource != null) {
        address = addressSource.getAddress(request);
        request.address(address);
    }
    if (StringUtils.isNotEmpty(responseEncoding)) {
        request.setResponseEncode(responseEncoding);
    }
    if (StringUtils.isNotEmpty(renderedContentType)) {
        request.setContentType(renderedContentType);
    }
    if (StringUtils.isNotEmpty(contentEncoding)) {
        request.setContentEncoding(contentEncoding);
    }
    if (StringUtils.isNotEmpty(renderedUserAgent)) {
        request.setUserAgent(renderedUserAgent);
    }
    for (int i = 0; i < namedParameters.size(); i++) {
        MappingParameter parameter = namedParameters.get(i);
        if (parameter.isObjectProperties()) {
            int target = parameter.isUnknownTarget() ? type.getDefaultParamTarget() : parameter.getTarget();
            Object obj = args[parameter.getIndex()];
            if (obj == null && StringUtils.isNotEmpty(parameter.getDefaultValue())) {
                obj = parameter.getConvertedDefaultValue(configuration.getJsonConverter());
            }
            if (parameter.isJsonParam()) {
                String json = "";
                if (obj != null) {
                    ForestJsonConverter jsonConverter = configuration.getJsonConverter();
                    obj = parameter.getFilterChain().doFilter(configuration, obj);
                    json = jsonConverter.encodeToString(obj);
                }
                if (MappingParameter.isHeader(target)) {
                    request.addHeader(new RequestNameValue(parameter.getJsonParamName(), json, target).setDefaultValue(parameter.getDefaultValue()));
                } else {
                    nameValueList.add(new RequestNameValue(parameter.getJsonParamName(), json, target, parameter.getPartContentType()).setDefaultValue(parameter.getDefaultValue()));
                }
            } else if (!parameter.getFilterChain().isEmpty()) {
                obj = parameter.getFilterChain().doFilter(configuration, obj);
                if (obj == null && StringUtils.isNotEmpty(parameter.getDefaultValue())) {
                    obj = parameter.getDefaultValue();
                }
                if (obj != null) {
                    if (MappingParameter.isHeader(target)) {
                        request.addHeader(new RequestNameValue(null, obj, target));
                    } else if (MappingParameter.isQuery(target)) {
                        request.addQuery(obj.toString(), (Object) null, parameter.isUrlEncode(), parameter.getCharset());
                    } else if (MappingParameter.isBody(target)) {
                        ForestRequestBody body = RequestBodyBuilder.type(obj.getClass()).build(obj, parameter.getDefaultValue());
                        request.addBody(body);
                    } else {
                        nameValueList.add(new RequestNameValue(obj.toString(), target, parameter.getPartContentType()).setDefaultValue(parameter.getDefaultValue()));
                    }
                }
            } else if (obj instanceof CharSequence) {
                if (MappingParameter.isQuery(target)) {
                    request.addQuery(ForestQueryParameter.createSimpleQueryParameter(obj).setDefaultValue(parameter.getDefaultValue()));
                } else if (MappingParameter.isBody(target)) {
                    request.addBody(new StringRequestBody(obj.toString()).setDefaultValue(parameter.getDefaultValue()));
                }
            } else if (obj instanceof Map) {
                Map map = (Map) obj;
                if (MappingParameter.isQuery(target)) {
                    request.addQuery(map, parameter.isUrlEncode(), parameter.getCharset());
                } else if (MappingParameter.isBody(target)) {
                    request.addBody(map, parameter.getPartContentType());
                } else if (MappingParameter.isHeader(target)) {
                    request.addHeader(map);
                }
            } else if (obj instanceof Iterable || (obj != null && (obj.getClass().isArray() || ReflectUtils.isPrimaryType(obj.getClass())))) {
                if (MappingParameter.isQuery(target)) {
                    if (parameter.isJsonParam()) {
                        request.addQuery(parameter.getName(), obj, parameter.isUrlEncode(), parameter.getCharset());
                    } else {
                        if (obj instanceof Iterable) {
                            for (Object subItem : (Iterable) obj) {
                                if (subItem instanceof ForestQueryParameter) {
                                    request.addQuery((ForestQueryParameter) subItem);
                                } else {
                                    request.addQuery(ForestQueryParameter.createSimpleQueryParameter(subItem));
                                }
                            }
                        } else if (obj.getClass().isArray()) {
                            if (obj instanceof ForestQueryParameter[]) {
                                request.addQuery((ForestQueryParameter[]) obj);
                            }
                        }
                    }
                } else if (MappingParameter.isBody(target)) {
                    ForestRequestBody body = RequestBodyBuilder.type(obj.getClass()).build(obj, parameter.getDefaultValue());
                    request.addBody(body);
                }
            } else if (MappingParameter.isBody(target)) {
                ForestRequestBody body = RequestBodyBuilder.type(obj.getClass()).build(obj, parameter.getDefaultValue());
                request.addBody(body);
            } else {
                try {
                    List<RequestNameValue> list = getNameValueListFromObjectWithJSON(parameter, configuration, obj, type);
                    for (RequestNameValue nameValue : list) {
                        if (nameValue.isInHeader()) {
                            request.addHeader(nameValue);
                        } else {
                            nameValueList.add(nameValue);
                        }
                    }
                } catch (Throwable th) {
                    throw new ForestRuntimeException(th);
                }
            }
        } else if (parameter.getIndex() != null) {
            int target = parameter.isUnknownTarget() ? type.getDefaultParamTarget() : parameter.getTarget();
            RequestNameValue nameValue = new RequestNameValue(parameter.getName(), target, parameter.getPartContentType()).setDefaultValue(parameter.getDefaultValue());
            Object obj = args[parameter.getIndex()];
            if (obj == null && StringUtils.isNotEmpty(nameValue.getDefaultValue())) {
                obj = parameter.getConvertedDefaultValue(configuration.getJsonConverter());
            }
            if (obj != null) {
                if (MappingParameter.isQuery(target) && obj.getClass().isArray() && !(obj instanceof byte[]) && !(obj instanceof Byte[])) {
                    int len = Array.getLength(obj);
                    for (int idx = 0; idx < len; idx++) {
                        Object arrayItem = Array.get(obj, idx);
                        ForestQueryParameter queryParameter = new ForestQueryParameter(parameter.getName(), arrayItem, parameter.isUrlEncode(), parameter.getCharset());
                        request.addQuery(queryParameter);
                    }
                } else {
                    nameValue.setValue(obj);
                    if (MappingParameter.isHeader(target)) {
                        request.addHeader(nameValue);
                    } else if (MappingParameter.isQuery(target)) {
                        if (!parameter.isJsonParam() && obj instanceof Iterable) {
                            int index = 0;
                            MappingTemplate template = makeTemplate(parameter);
                            VariableScope parentScope = template.getVariableScope();
                            for (Object subItem : (Iterable) obj) {
                                SubVariableScope scope = new SubVariableScope(parentScope);
                                scope.addVariableValue("_it", subItem);
                                scope.addVariableValue("_index", index++);
                                template.setVariableScope(scope);
                                String name = template.render(args);
                                request.addQuery(name, subItem, parameter.isUrlEncode(), parameter.getCharset());
                            }
                        } else if (parameter.isJsonParam()) {
                            request.addJSONQuery(parameter.getName(), obj);
                        } else {
                            request.addQuery(parameter.getName(), obj, parameter.isUrlEncode(), parameter.getCharset());
                        }
                    } else {
                        MappingTemplate template = makeTemplate(parameter);
                        if (obj instanceof Iterable && template.hasIterateVariable()) {
                            int index = 0;
                            VariableScope parentScope = template.getVariableScope();
                            for (Object subItem : (Iterable) obj) {
                                SubVariableScope scope = new SubVariableScope(parentScope);
                                template.setVariableScope(scope);
                                scope.addVariableValue("_it", subItem);
                                scope.addVariableValue("_index", index++);
                                String name = template.render(args);
                                nameValueList.add(new RequestNameValue(name, subItem, target, parameter.getPartContentType()).setDefaultValue(parameter.getDefaultValue()));
                            }
                        } else {
                            nameValueList.add(nameValue);
                        }
                    }
                }
            }
        }
    }
    if (request.getContentType() == null) {
        if (StringUtils.isNotEmpty(baseContentType)) {
            request.setContentType(baseContentType);
        }
    }
    if (request.getContentEncoding() == null) {
        if (StringUtils.isNotEmpty(baseContentEncoding)) {
            request.setContentEncoding(baseContentEncoding);
        }
    }
    if (request.getUserAgent() == null) {
        if (StringUtils.isNotEmpty(baseUserAgent)) {
            request.setUserAgent(baseUserAgent);
        }
    }
    List<ForestMultipart> multiparts = new ArrayList<>(multipartFactories.size());
    String contentType = request.getContentType();
    if (!multipartFactories.isEmpty()) {
        if (StringUtils.isBlank(contentType)) {
            String boundary = StringUtils.generateBoundary();
            request.setContentType(ContentType.MULTIPART_FORM_DATA + "; boundary=" + boundary);
        } else if (ContentType.MULTIPART_FORM_DATA.equalsIgnoreCase(contentType) && request.getBoundary() == null) {
            request.setBoundary(StringUtils.generateBoundary());
        }
    }
    for (int i = 0; i < multipartFactories.size(); i++) {
        ForestMultipartFactory factory = multipartFactories.get(i);
        MappingTemplate nameTemplate = factory.getNameTemplate();
        MappingTemplate fileNameTemplate = factory.getFileNameTemplate();
        int index = factory.getIndex();
        Object data = args[index];
        factory.addMultipart(nameTemplate, fileNameTemplate, data, multiparts, args);
    }
    request.setMultiparts(multiparts);
    // setup ssl keystore
    if (sslKeyStoreId != null) {
        SSLKeyStore sslKeyStore = null;
        String keyStoreId = sslKeyStoreId.render(args);
        if (StringUtils.isNotEmpty(keyStoreId)) {
            sslKeyStore = configuration.getKeyStore(keyStoreId);
            request.setKeyStore(sslKeyStore);
        }
    }
    if (encoder != null) {
        request.setEncoder(encoder);
    }
    if (decoder != null) {
        request.setDecoder(decoder);
    }
    if (progressStep >= 0) {
        request.setProgressStep(progressStep);
    }
    if (configuration.getDefaultParameters() != null) {
        request.addNameValue(configuration.getDefaultParameters());
    }
    if (baseHeaders != null && baseHeaders.length > 0) {
        for (MappingTemplate baseHeader : baseHeaders) {
            String headerText = baseHeader.render(args);
            String[] headerNameValue = headerText.split(":", 2);
            if (headerNameValue.length > 1) {
                String name = headerNameValue[0].trim();
                if (request.getHeader(name) == null) {
                    request.addHeader(name, headerNameValue[1].trim());
                }
            }
        }
    }
    if (configuration.getDefaultHeaders() != null) {
        request.addHeaders(configuration.getDefaultHeaders());
    }
    List<RequestNameValue> dataNameValueList = new ArrayList<>();
    renderedContentType = request.getContentType();
    if (renderedContentType == null || renderedContentType.equalsIgnoreCase(ContentType.APPLICATION_X_WWW_FORM_URLENCODED)) {
        for (int i = 0; i < dataTemplateArray.length; i++) {
            MappingTemplate dataTemplate = dataTemplateArray[i];
            String data = dataTemplate.render(args);
            String[] paramArray = data.split("&");
            for (int j = 0; j < paramArray.length; j++) {
                String dataParam = paramArray[j];
                String[] dataNameValue = dataParam.split("=", 2);
                if (dataNameValue.length > 0) {
                    String name = dataNameValue[0].trim();
                    RequestNameValue nameValue = new RequestNameValue(name, type.getDefaultParamTarget());
                    if (dataNameValue.length == 2) {
                        nameValue.setValue(dataNameValue[1].trim());
                    }
                    nameValueList.add(nameValue);
                    dataNameValueList.add(nameValue);
                }
            }
        }
    } else {
        for (int i = 0; i < dataTemplateArray.length; i++) {
            MappingTemplate dataTemplate = dataTemplateArray[i];
            String data = dataTemplate.render(args);
            request.addBody(data);
        }
    }
    request.addNameValue(nameValueList);
    for (int i = 0; i < headerTemplateArray.length; i++) {
        MappingTemplate headerTemplate = headerTemplateArray[i];
        String header = headerTemplate.render(args);
        String[] headNameValue = header.split(":", 2);
        if (headNameValue.length > 0) {
            String name = headNameValue[0].trim();
            RequestNameValue nameValue = new RequestNameValue(name, TARGET_HEADER);
            if (headNameValue.length == 2) {
                nameValue.setValue(headNameValue[1].trim());
            }
            request.addHeader(nameValue);
        }
    }
    if (timeout != null) {
        request.setTimeout(timeout);
    } else if (baseTimeout != null) {
        request.setTimeout(baseTimeout);
    } else if (configuration.getTimeout() != null) {
        request.setTimeout(configuration.getTimeout());
    }
    if (connectTimeout != null) {
        request.setConnectTimeout(connectTimeout);
    } else if (baseConnectTimeout != null) {
        request.setConnectTimeout(baseConnectTimeout);
    } else if (configuration.getConnectTimeout() != null) {
        request.setConnectTimeout(configuration.getConnectTimeout());
    }
    if (readTimeout != null) {
        request.setReadTimeout(readTimeout);
    } else if (baseReadTimeout != null) {
        request.setReadTimeout(baseReadTimeout);
    } else if (configuration.getReadTimeout() != null) {
        request.setReadTimeout(configuration.getReadTimeout());
    }
    if (retryCount != null) {
        request.setMaxRetryCount(retryCount);
    } else if (baseRetryCount != null) {
        request.setMaxRetryCount(baseRetryCount);
    } else if (configuration.getMaxRetryCount() != null) {
        request.setMaxRetryCount(configuration.getMaxRetryCount());
    }
    if (maxRetryInterval >= 0) {
        request.setMaxRetryInterval(maxRetryInterval);
    } else if (baseMaxRetryInterval != null) {
        request.setMaxRetryInterval(baseMaxRetryInterval);
    } else if (configuration.getMaxRetryInterval() >= 0) {
        request.setMaxRetryInterval(configuration.getMaxRetryInterval());
    }
    Class globalRetryerClass = configuration.getRetryer();
    if (retryerClass != null && ForestRetryer.class.isAssignableFrom(retryerClass)) {
        request.setRetryer(retryerClass);
    } else if (baseRetryerClass != null && ForestRetryer.class.isAssignableFrom(baseRetryerClass)) {
        request.setRetryer(baseRetryerClass);
    } else if (globalRetryerClass != null && ForestRetryer.class.isAssignableFrom(globalRetryerClass)) {
        request.setRetryer(globalRetryerClass);
    }
    if (onSuccessParameter != null) {
        OnSuccess<?> onSuccessCallback = (OnSuccess<?>) args[onSuccessParameter.getIndex()];
        request.setOnSuccess(onSuccessCallback);
    }
    if (onErrorParameter != null) {
        OnError onErrorCallback = (OnError) args[onErrorParameter.getIndex()];
        request.setOnError(onErrorCallback);
    }
    if (onRedirectionParameter != null) {
        OnRedirection onRedirectionCallback = (OnRedirection) args[onRedirectionParameter.getIndex()];
        request.setOnRedirection(onRedirectionCallback);
    }
    if (onProgressParameter != null) {
        OnProgress onProgressCallback = (OnProgress) args[onProgressParameter.getIndex()];
        request.setOnProgress(onProgressCallback);
    }
    if (onSaveCookieParameter != null) {
        OnSaveCookie onSaveCookieCallback = (OnSaveCookie) args[onSaveCookieParameter.getIndex()];
        request.setOnSaveCookie(onSaveCookieCallback);
    }
    if (onLoadCookieParameter != null) {
        OnLoadCookie onLoadCookieCallback = (OnLoadCookie) args[onLoadCookieParameter.getIndex()];
        request.setOnLoadCookie(onLoadCookieCallback);
    }
    String dataType = dataTypeTemplate.render(args);
    if (StringUtils.isEmpty(dataType)) {
        request.setDataType(ForestDataType.TEXT);
    } else {
        dataType = dataType.toUpperCase();
        ForestDataType forestDataType = ForestDataType.findByName(dataType);
        request.setDataType(forestDataType);
    }
    if (interceptorAttributesList != null && interceptorAttributesList.size() > 0) {
        for (InterceptorAttributes attributes : interceptorAttributesList) {
            InterceptorAttributes newAttrs = attributes.clone();
            request.addInterceptorAttributes(newAttrs.getInterceptorClass(), newAttrs);
            request.getInterceptorAttributes(newAttrs.getInterceptorClass()).render(args);
        }
    }
    if (globalInterceptorList != null && globalInterceptorList.size() > 0) {
        for (Interceptor item : globalInterceptorList) {
            request.addInterceptor(item);
        }
    }
    if (baseInterceptorList != null && baseInterceptorList.size() > 0) {
        for (Interceptor item : baseInterceptorList) {
            request.addInterceptor(item);
        }
    }
    if (interceptorList != null && interceptorList.size() > 0) {
        for (Interceptor item : interceptorList) {
            request.addInterceptor(item);
        }
    }
    return request;
}
Also used : MalformedURLException(java.net.MalformedURLException) OnError(com.dtflys.forest.callback.OnError) OnProgress(com.dtflys.forest.callback.OnProgress) SSLKeyStore(com.dtflys.forest.ssl.SSLKeyStore) ForestDataType(com.dtflys.forest.utils.ForestDataType) ForestURL(com.dtflys.forest.http.ForestURL) ForestMultipartFactory(com.dtflys.forest.multipart.ForestMultipartFactory) AddressSource(com.dtflys.forest.callback.AddressSource) OnRedirection(com.dtflys.forest.callback.OnRedirection) ForestAddress(com.dtflys.forest.http.ForestAddress) OnSaveCookie(com.dtflys.forest.callback.OnSaveCookie) ForestQueryMap(com.dtflys.forest.http.ForestQueryMap) VariableScope(com.dtflys.forest.config.VariableScope) SubVariableScope(com.dtflys.forest.mapping.SubVariableScope) OnLoadCookie(com.dtflys.forest.callback.OnLoadCookie) ForestJsonConverter(com.dtflys.forest.converter.json.ForestJsonConverter) MappingTemplate(com.dtflys.forest.mapping.MappingTemplate) ForestMultipart(com.dtflys.forest.multipart.ForestMultipart) OnSuccess(com.dtflys.forest.callback.OnSuccess) ForestQueryMap(com.dtflys.forest.http.ForestQueryMap) URL(java.net.URL) ForestURL(com.dtflys.forest.http.ForestURL) ForestRequestType(com.dtflys.forest.http.ForestRequestType) RequestNameValue(com.dtflys.forest.utils.RequestNameValue) SubVariableScope(com.dtflys.forest.mapping.SubVariableScope) Interceptor(com.dtflys.forest.interceptor.Interceptor) ForestRequestBody(com.dtflys.forest.http.ForestRequestBody) MappingParameter(com.dtflys.forest.mapping.MappingParameter) ForestRuntimeException(com.dtflys.forest.exceptions.ForestRuntimeException) ForestRequest(com.dtflys.forest.http.ForestRequest) StringRequestBody(com.dtflys.forest.http.body.StringRequestBody) ForestQueryParameter(com.dtflys.forest.http.ForestQueryParameter) InterceptorAttributes(com.dtflys.forest.interceptor.InterceptorAttributes) ForestRetryer(com.dtflys.forest.retryer.ForestRetryer)

Example 2 with OnProgress

use of com.dtflys.forest.callback.OnProgress in project forest by dromara.

the class MethodLifeCycleHandler method handleProgress.

@Override
public void handleProgress(ForestRequest request, ForestProgress progress) {
    request.getInterceptorChain().onProgress(progress);
    OnProgress onProgress = request.getOnProgress();
    if (onProgress != null) {
        onProgress.onProgress(progress);
    }
}
Also used : OnProgress(com.dtflys.forest.callback.OnProgress)

Aggregations

OnProgress (com.dtflys.forest.callback.OnProgress)2 AddressSource (com.dtflys.forest.callback.AddressSource)1 OnError (com.dtflys.forest.callback.OnError)1 OnLoadCookie (com.dtflys.forest.callback.OnLoadCookie)1 OnRedirection (com.dtflys.forest.callback.OnRedirection)1 OnSaveCookie (com.dtflys.forest.callback.OnSaveCookie)1 OnSuccess (com.dtflys.forest.callback.OnSuccess)1 VariableScope (com.dtflys.forest.config.VariableScope)1 ForestJsonConverter (com.dtflys.forest.converter.json.ForestJsonConverter)1 ForestRuntimeException (com.dtflys.forest.exceptions.ForestRuntimeException)1 ForestAddress (com.dtflys.forest.http.ForestAddress)1 ForestQueryMap (com.dtflys.forest.http.ForestQueryMap)1 ForestQueryParameter (com.dtflys.forest.http.ForestQueryParameter)1 ForestRequest (com.dtflys.forest.http.ForestRequest)1 ForestRequestBody (com.dtflys.forest.http.ForestRequestBody)1 ForestRequestType (com.dtflys.forest.http.ForestRequestType)1 ForestURL (com.dtflys.forest.http.ForestURL)1 StringRequestBody (com.dtflys.forest.http.body.StringRequestBody)1 Interceptor (com.dtflys.forest.interceptor.Interceptor)1 InterceptorAttributes (com.dtflys.forest.interceptor.InterceptorAttributes)1