Skip to content
bdq edited this page Feb 16, 2020 · 7 revisions

WebServer对于每一个请求,都会创建一个RoutingContext,代表请求的上下文,通过RoutingContext可以获取所有的请求数据以及对请求作出一些响应,具体可以参考Vertx-Web的相关问题。

RoutingContext的获取,可以通过在路由方法上声明一个RoutingContext参数来实现,RoutingContext的实例将自动注入到此参数上;除此以外,通过解析RoutingContext对象,我们可以得到HttpServerRequest和HttpServerResponse对象。

通过在路由方法上声明HttpServerRequest或HttpServerResponse类型的参数,WebServer也会将对应实例自动注入到此参数上。

Example:

    public void hello(RoutingContext routingContext, 
                        HttpServerResponse response, 
                        HttpServerRequest request) {
        ...
    }

另外,对于接收到的HTTP请求我们会解析其请求参数与表单数据,然后将其按一定规则注入到路由方法的参数中,目前暂时支持八大基本类型、字符串和集合类型。

primitive

对于路由方法的参数中的基本类型及其对应包装类型的参数,如果被@Param注解,Festival Web会拿到@Param的value并当作key来找到请求参数与表单数据中所对应的值,转化后注入此参数。

Example:

表单数据样例:

username: xiaoming
isActive: true
age: 13
score: 83.5

    @PostMapping("/user")
    public User addUser(@Param("age") int age,
                        @Param("name") String name,
                        @Param("isActive") boolean active,
                        @Param("score") float score) {
        System.out.println(name); //xiaoming
        System.out.println(active); //true
        System.out.println(age); //13
        System.out.println(score); //83.5
        //...
    }
    @PostMapping("/user")
    public User addUser(@Param("age") Integer age,
                        @Param("name") String name,
                        @Param("isActive") Boolean active,
                        @Param("score") Double score
                        ) {
        System.out.println(name); //xiaoming
        System.out.println(active); //true
        System.out.println(age); //13
        System.out.println(score); //83.5
        //...
    }

collection

对于Map类型的参数,对于GET请求,我们将请求参数键值对全部存入Map中,对于其他请求,我们将表单数据的键值对全部存入其中。

Example:

表单数据样例:

username: xiaoming
isActive: true
age: 13
score: 83.5

    @PostMapping("/user")
    public User addUser(MultiMap user) {
        System.out.println(user.get("username")); //xiaoming
        System.out.println(user.get("isActive")); //true
        System.out.println(user.get("age")); //13
        System.out.println(user.get("score")); //83.5
        //...
    }