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

com.blade.mvc.http.Request Maven / Gradle / Ivy

package com.blade.mvc.http;

import com.blade.kit.StringKit;
import com.blade.kit.WebKit;
import com.blade.mvc.WebContext;
import com.blade.mvc.multipart.FileItem;
import com.blade.mvc.route.Route;
import io.netty.buffer.ByteBuf;
import lombok.NonNull;

import java.util.List;
import java.util.Map;
import java.util.Optional;

import static io.netty.handler.codec.http.HttpHeaders.Names.CONTENT_TYPE;
import static io.netty.handler.codec.http.HttpHeaders.Names.USER_AGENT;

/**
 * Http Request
 *
 * @author biezhi
 *         2017/5/31
 */
public interface Request {

    /**
     * init request path parameters
     *
     * @param route
     * @return
     */
    Request initPathParams(Route route);

    Route route();

    /**
     * @return Return client request host
     */
    String host();

    /**
     * @return Return request uri
     */
    String uri();

    /**
     * @return request url
     */
    String url();

    /**
     * @return return user-agent
     */
    default String userAgent() {
        return header(USER_AGENT);
    }

    /**
     * @return Return protocol
     */
    String protocol();

    /**
     * @return Return contextPath
     */
    default String contextPath() {
        return WebContext.contextPath();
    }

    /**
     * @return Return parameters on the path Map
     */
    Map pathParams();

    /**
     * Get a URL parameter
     *
     * @param name Parameter name
     * @return Return parameter value
     */
    default String pathString(@NonNull String name) {
        return pathParams().get(name);
    }

    /**
     * Return a URL parameter for a Int type
     *
     * @param name Parameter name
     * @return Return Int parameter value
     */
    default Integer pathInt(@NonNull String name) {
        String val = pathString(name);
        return StringKit.isNotBlank(val) ? Integer.parseInt(val) : null;
    }

    /**
     * Return a URL parameter for a Long type
     *
     * @param name Parameter name
     * @return Return Long parameter value
     */
    default Long pathLong(@NonNull String name) {
        String val = pathString(name);
        return StringKit.isNotBlank(val) ? Long.parseLong(val) : null;
    }

    /**
     * @return Return query string
     */
    String queryString();

    /**
     * @return Return request query Map
     */
    Map> parameters();

    /**
     * Get a request parameter
     *
     * @param name Parameter name
     * @return Return request parameter value
     */
    default Optional query(@NonNull String name) {
        List values = parameters().get(name);
        if (null != values && values.size() > 0)
            return Optional.of(values.get(0));
        return Optional.empty();
    }

    /**
     * Get a request parameter, if NULL is returned to defaultValue
     *
     * @param name         parameter name
     * @param defaultValue default String value
     * @return Return request parameter values
     */
    default String query(@NonNull String name, @NonNull String defaultValue) {
        Optional value = query(name);
        if (value.isPresent())
            return value.get();
        return defaultValue;
    }

    /**
     * Returns a request parameter for a Int type
     *
     * @param name Parameter name
     * @return Return Int parameter values
     */
    default Optional queryInt(@NonNull String name) {
        Optional value = query(name);
        if (value.isPresent())
            return Optional.of(Integer.parseInt(value.get()));
        return Optional.empty();
    }

    /**
     * Returns a request parameter for a Int type
     *
     * @param name         Parameter name
     * @param defaultValue default int value
     * @return Return Int parameter values
     */
    default int queryInt(@NonNull String name, int defaultValue) {
        Optional value = query(name);
        if (value.isPresent())
            return Integer.parseInt(value.get());
        return defaultValue;
    }

    /**
     * Returns a request parameter for a Long type
     *
     * @param name Parameter name
     * @return Return Long parameter values
     */
    default Optional queryLong(@NonNull String name) {
        Optional value = query(name);
        if (value.isPresent())
            return Optional.of(Long.parseLong(value.get()));
        return Optional.empty();
    }

    /**
     * Returns a request parameter for a Long type
     *
     * @param name         Parameter name
     * @param defaultValue default long value
     * @return Return Long parameter values
     */
    default long queryLong(@NonNull String name, long defaultValue) {
        Optional value = query(name);
        if (value.isPresent())
            return Long.parseLong(value.get());
        return defaultValue;
    }

    /**
     * Returns a request parameter for a Double type
     *
     * @param name Parameter name
     * @return Return Double parameter values
     */
    default Optional queryDouble(@NonNull String name) {
        Optional value = query(name);
        if (value.isPresent())
            return Optional.of(Double.parseDouble(value.get()));
        return Optional.empty();
    }

    /**
     * Returns a request parameter for a Double type
     *
     * @param name         Parameter name
     * @param defaultValue default double value
     * @return Return Double parameter values
     */
    default double queryDouble(@NonNull String name, double defaultValue) {
        Optional value = query(name);
        if (value.isPresent())
            return Double.parseDouble(value.get());
        return defaultValue;
    }

    /**
     * @return Return request method
     */
    String method();

    /**
     * @return Return HttpMethod
     */
    HttpMethod httpMethod();

    /**
     * @return Return server remote address
     */
    default String address() {
        return WebKit.ipAddr(this);
    }

    /**
     * @return Return current session
     */
    Session session();

    /**
     * @return Return contentType
     */
    default String contentType() {
        String contentType = header(CONTENT_TYPE);
        return null != contentType ? contentType : "Unknown";
    }

    /**
     * @return Return whether to use the SSL connection
     */
    boolean isSecure();

    /**
     * @return Return current request is a AJAX request
     */
    default boolean isAjax() {
        return "XMLHttpRequest".equals(header("x-requested-with"));
    }

    /**
     * @return return current request is IE browser
     */
    default boolean isIE() {
        String ua = userAgent();
        return ua.contains("MSIE") || ua.contains("TRIDENT");
    }

    Map cookies();

    /**
     * Get String Cookie Value
     *
     * @param name cookie name
     * @return Return Cookie Value
     */
    default Optional cookie(@NonNull String name) {
        String value = cookies().getOrDefault(name, "");
        if (value.length() > 0) {
            return Optional.of(value);
        }
        return Optional.empty();
    }

    Optional cookieRaw(String name);

    /**
     * Get String Cookie Value
     *
     * @param name         cookie name
     * @param defaultValue default cookie value
     * @return Return Cookie Value
     */
    default String cookie(@NonNull String name, @NonNull String defaultValue) {
        return cookie(name).isPresent() ? cookie(name).get() : defaultValue;
    }

    /**
     * Add a cookie to the request
     *
     * @param cookie
     * @return
     */
    Request cookie(Cookie cookie);

    /**
     * @return Return header information Map
     */
    Map headers();

    /**
     * Get header information
     *
     * @param name Parameter name
     * @return Return header information
     */
    default String header(@NonNull String name) {
        return headers().getOrDefault(name, "");
    }

    /**
     * Get header information
     *
     * @param name         Parameter name
     * @param defaultValue default header value
     * @return Return header information
     */
    default String header(@NonNull String name, @NonNull String defaultValue) {
        String value = header(name);
        return value.length() > 0 ? value : defaultValue;
    }

    /**
     * @return return current request connection keepAlive
     */
    boolean keepAlive();

    /**
     * @return Return all Attribute in Request
     */
    Map attributes();

    /**
     * Setting Request Attribute
     *
     * @param name  Parameter name
     * @param value Parameter Value
     */
    default Request attribute(@NonNull String name, @NonNull Object value) {
        attributes().put(name, value);
        return this;
    }

    /**
     * Get a Request Attribute
     *
     * @param name Parameter name
     * @return Return parameter value
     */
    default  T attribute(@NonNull String name) {
        Object object = attributes().get(name);
        return null != object ? (T) object : null;
    }

    /**
     * @return return request file items
     */
    Map fileItems();

    /**
     * get file item by request part name
     *
     * @param name
     * @return
     */
    default Optional fileItem(@NonNull String name) {
        return Optional.ofNullable(fileItems().get(name));
    }

    /**
     * @return Return request body
     */
    ByteBuf body();

    /**
     * @return return request body to string
     */
    String bodyToString();

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy