UrlBuilder.java 1.7 KB
Newer Older
1 2 3
package me.zhyd.oauth.utils;

import cn.hutool.core.lang.Assert;
不合群的混子's avatar
不合群的混子 已提交
4
import cn.hutool.core.map.MapUtil;
5
import cn.hutool.core.util.StrUtil;
智布道's avatar
智布道 已提交
6
import lombok.Setter;
7 8 9 10 11 12 13 14 15

import java.util.LinkedHashMap;
import java.util.Map;

/**
 * <p>
 * 构造URL
 * </p>
 *
不合群的混子's avatar
不合群的混子 已提交
16
 * @author yangkai.shen (https://xkcoding.com)
智布道's avatar
智布道 已提交
17
 * @since 1.9.0
18
 */
智布道's avatar
智布道 已提交
19
@Setter
20 21
public class UrlBuilder {

智布道's avatar
智布道 已提交
22
    private final Map<String, Object> params = new LinkedHashMap<>(7);
智布道's avatar
智布道 已提交
23 24 25 26 27
    private String baseUrl;

    private UrlBuilder() {

    }
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

    /**
     * @param baseUrl 基础路径
     * @return the new {@code UrlBuilder}
     */
    public static UrlBuilder fromBaseUrl(String baseUrl) {
        UrlBuilder builder = new UrlBuilder();
        builder.setBaseUrl(baseUrl);
        return builder;
    }

    /**
     * 添加参数
     *
     * @param key   参数名称
     * @param value 参数值
     * @return this UrlBuilder
     */
    public UrlBuilder queryParam(String key, Object value) {
        Assert.notBlank(key, "参数名不能为空");

        String valueAsString = (value != null ? value.toString() : null);
        this.params.put(key, valueAsString);

        return this;
    }

    /**
     * 构造url
     *
     * @return url
     */
    public String build() {
        return this.build(false);
    }

    /**
     * 构造url
     *
     * @param encode 转码
     * @return url
     */
    public String build(boolean encode) {
不合群的混子's avatar
不合群的混子 已提交
71 72 73
        if (MapUtil.isEmpty(this.params)) {
            return this.baseUrl;
        }
74 75 76 77 78
        String baseUrl = StrUtil.addSuffixIfNot(this.baseUrl, "?");
        String paramString = GlobalAuthUtil.parseMapToString(this.params, encode);
        return baseUrl + paramString;
    }
}