-
Notifications
You must be signed in to change notification settings - Fork 17
Param
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请求我们会解析其请求参数与表单数据,然后将其按一定规则注入到路由方法的参数中,目前暂时支持八大基本类型、字符串和集合类型。
对于路由方法的参数中的基本类型及其对应包装类型的参数,如果被@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
//...
}
对于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
//...
}