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

top.jfunc.http.holder.PhpUrlHolder Maven / Gradle / Ivy

package top.jfunc.http.holder;

import top.jfunc.http.base.Protocol;
import top.jfunc.common.utils.MultiValueMap;

import java.net.URL;
import java.util.Map;

/**
 * 在{@link UrlHolder}基础上增加对各个part分别处理的:包括 protocol、host、port、path
 * 名字得于 protocol-host-port
 * @author xiongshiyan at 2019/6/28 , contact me with email [email protected] or phone 15208384257
 */
public interface PhpUrlHolder extends UrlHolder {
    /**
     * 请求的URL
     * @return 请求的URL
     */
    @Override
    String getUrl();

    /**
     * 设置URL
     * @param url url
     * @return this
     */
    @Override
    PhpUrlHolder setUrl(String url);

    /**
     * 设置URL
     * @param url URL
     * @return this
     */
    @Override
    default PhpUrlHolder setUrl(URL url){
        return setUrl(url.toString());
    }

    /**
     * 设置协议
     * @param protocol 协议
     * @return this
     */
    PhpUrlHolder protocol(Protocol protocol);

    /**
     * 获取协议
     * @return 协议
     */
    Protocol protocol();

    /**
     * 设置host,可能是IP、hostName
     * @param host host
     * @return this
     */
    PhpUrlHolder host(String host);

    /**
     * 获取主机
     * @return 主机
     */
    String host();

    /**
     * 设置端口
     * @param port port
     * @return this
     */
    PhpUrlHolder port(int port);

    /**
     * 获取端口
     * @return 端口
     */
    int port();


    /**
     * 一起设置协议和host
     * @param protocol 协议
     * @param host host
     * @return this
     */
    default PhpUrlHolder protocolHost(Protocol protocol, String host){
        protocol(protocol);
        host(host);
        return this;
    }

    /**
     * 一起设置协议和端口
     * @param protocol 协议
     * @param port 端口
     * @return this
     */
    default PhpUrlHolder protocolPort(Protocol protocol, int port){
        protocol(protocol);
        port(port);
        return this;
    }
    /**
     * 一起设置host和端口
     * @param host host
     * @param port 端口
     * @return this
     */
    default PhpUrlHolder hostPort(String host, int port){
        host(host);
        port(port);
        return this;
    }

    /**
     * 三个一起设置
     * @param protocol 协议
     * @param host host
     * @param port 端口
     * @return this
     */
    default PhpUrlHolder php(Protocol protocol, String host, int port){
        protocol(protocol);
        host(host);
        port(port);
        return this;
    }


    /**
     * 设置路径
     * @param path 路径,可以设置路径参数/{routeParam}/{routeParam}
     * @param paths 多个路径拼接在后面
     * @return this
     */
    PhpUrlHolder path(String path, String... paths);

    /**
     * 获取路径
     * @return 路径
     */
    String path();

    /**
     * 便捷地设置路径参数
     * @param key key
     * @param value value
     * @return this
     */
    @Override
    default PhpUrlHolder addRouteParam(String key, String value){
        routeParamHolder().put(key, value);
        return this;
    }

    /**
     * 便捷地设置路径参数
     * @param routeParams 多个路径参数
     * @return this
     */
    @Override
    default PhpUrlHolder setRouteParams(Map routeParams){
        routeParamHolder().setMap(routeParams);
        return this;
    }

    /**
     * 提供便捷的设置Query参数的方法
     * @param key key
     * @param value value
     * @param values values
     * @return this
     */
    @Override
    default PhpUrlHolder addQueryParam(String key, String value, String... values){
        queryParamHolder().add(key, value, values);
        return this;
    }

    /**
     * 提供便捷的设置Query参数的方法
     * @param queryParams 多个查询参数
     * @return this
     */
    @Override
    default PhpUrlHolder setQueryParams(MultiValueMap queryParams){
        queryParamHolder().set(queryParams);
        return this;
    }

    /**
     * 提供便捷的设置Query参数的方法
     * @param queryParams 多个查询参数
     * @return this
     */
    @Override
    default PhpUrlHolder setQueryParams(Map queryParams){
        queryParamHolder().set(queryParams);
        return this;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy