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

cc.shacocloud.mirage.web.RoutingContext Maven / Gradle / Ivy

package cc.shacocloud.mirage.web;

import io.vertx.core.AsyncResult;
import io.vertx.core.Handler;
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpMethod;
import io.vertx.ext.web.Router;
import org.jetbrains.annotations.Nullable;

import java.util.*;
import java.util.function.Supplier;

/**
 * 路由请求上下文
 */
public interface RoutingContext {

    /**
     * 接收请求时间 key,使用 {@link #get(String)} 获取
     */
    String RECEIVE_REQUEST_TIME = "_receiveRequestTime";

    /**
     * 系统内置的上下文内容键,非系统目录不可以更新,只能获取
     */
    Set INTERNAL_SYSTEM_KEY = Collections.unmodifiableSet(
        new HashSet<>(
            Arrays.asList(RECEIVE_REQUEST_TIME)
        )
    );

    /**
     * @return {@link Vertx}。与此上下文的初始化{@link Router}相关联的实例
     */
    Vertx vertx();

    /**
     * @return HTTP请求对象
     */
    HttpRequest request();

    /**
     * @param request 自定义请求体
     * @return HTTP请求对象
     */
    HttpRequest request(HttpRequest request);

    /**
     * @return HTTP响应对象
     */
    HttpResponse response();

    /**
     * @param response 自定义响应体
     * @return HTTP响应对象
     */
    HttpResponse response(HttpResponse response);

    /**
     * 在上下文中放置一些任意的数据。这将在任何接收上下文的处理程序中可用。
     *
     * @param key 数据的键
     * @param obj 的数据
     * @return 引用,这样API就可以流畅地使用
     */
    RoutingContext put(String key, Object obj);

    /**
     * 从上下文获取一些数据。数据可在任何接收上下文的处理程序中使用。
     *
     * @param key 数据的键
     * @param  数据的类型
     * @return 数据
     * @throws ClassCastException 如果数据不是预期的类型
     */
    @Nullable  T get(String key);

    /**
     * 从上下文获取一些数据。数据可在任何接收上下文的处理程序中使用。
     *
     * @param key      数据的键
     * @param supplier 如果在上下文中值不存在则使用该函数提供处理
     * @param       数据的类型
     * @return 数据
     * @throws ClassCastException 如果数据不是预期的类型
     */
     T get(String key, Supplier supplier);

    /**
     * 从上下文中删除一些数据。数据可在任何接收上下文的处理程序中使用。
     *
     * @param key 数据的键
     * @param  数据的类型
     * @return 与键关联的先前数据
     * @throws ClassCastException 如果数据不是预期的类型
     */
     T remove(String key);

    /**
     * @return 所有上下文数据都作为一个映射
     * @see #put(String, Object)
     */
    Map data();

    /**
     * 返回请求的标准化路径。
     * 

* 如果访问客户端请求的服务器资源,建议始终使用规范化的路径,而不是{@link HttpRequest#path()} * * @return 正常路径 */ String normalisedPath(); /** * 使用新路径重新启动当前路由器,并重用原来的方法。然后所有路径参数都被解析,并在params列表中可用。查询参数也将被允许和可用。 * * @param path 新的http路径。 */ default void reroute(String path) { reroute(request().method(), path); } /** * 用新的方法和路径重新启动当前路由器。然后,所有路径参数都被解析并在 params列表中可用。查询参数也将被允许和可用。 * * @param method 新的http请求 * @param path 新的http路径 */ void reroute(HttpMethod method, String path); /** * 告诉路由器将这个上下文路由到下一个匹配的路由(如果有的话)。 *

* 如果一个处理程序没有调用next,那么处理程序应该确保它结束响应,否则没有响应将被发送。 */ void next(); /** * 为请求/响应上下文添加一个结束处理程序。 *

* 当响应被释放或遇到异常时,将调用此函数以允许一致的清理,或当客户端接收到响应时异步调用处理程序。 * * @param handler 将被调用并有成功或失败结果的处理程序。 * @return 处理程序的id。如果您稍后想要删除处理程序,可以使用此方法。 */ int addEndHandler(Handler> handler); /** * 删除一个结束处理程序 * * @param handlerId 从{@link #addEndHandler}返回的id。 * @return 如果处理程序存在并被删除,则为true,否则为false */ boolean removeEndHandler(int handlerId); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy