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

top.jfunc.http.request.StringBodyRequest Maven / Gradle / Ivy

package top.jfunc.http.request;

import top.jfunc.http.config.Config;
import top.jfunc.http.base.MediaType;
import top.jfunc.common.utils.StrUtil;

/**
 * 有请求体的请求
 * !!因为Form请求体也是Body,但是用setBody方式不好使用,所以两个分开
 *
 * @author xiongshiyan at 2019/5/18 , contact me with email [email protected] or phone 15208384257
 */
public interface StringBodyRequest extends HttpRequest {
    /**
     * 请求体,可以代表Form、Json等
     * @return 请求体
     */
    String getBody();

    /**
     * 获取body的编码
     * @return charset
     */
    String getBodyCharset();

    /**
     * 设置BodyCharset
     * 默认都是{@link Config#DEFAULT_CHARSET},如果不是
     * 需要显式地设置为null才能利用{@link Config#defaultBodyCharset}
     * @see #calculateBodyCharset()
     * @param bodyCharset bodyCharset
     * @return this
     */
    StringBodyRequest setBodyCharset(String bodyCharset);

    /**
     * bodyCharset[StringHttpRequest中显式地设置]->contentType->全局默认
     * @return 计算后的bodyCharset
     */
    default String calculateBodyCharset(){
        String bodyCharset = getBodyCharset();

        //本身是可以的
        if(StrUtil.isNotEmpty(bodyCharset)){
            return bodyCharset;
        }

        String contentType = getContentType();
        if(StrUtil.isEmpty(contentType)){
            Config config = getConfig();
            Config.throwExIfNull(config);
            return config.getDefaultBodyCharset();
        }
        MediaType mediaType = MediaType.parse(contentType);
        //content-type不正确或者没带字符编码
        if(null == mediaType || null == mediaType.charset()){
            Config config = getConfig();
            Config.throwExIfNull(config);
            return config.getDefaultBodyCharset();
        }

        return mediaType.charset().name();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy