引用《Vert.x 4 Web REST CRUD接口应用》项目,加入日志依赖并编码实现类似Interceptor功能处理。vert.x日志集成参考《Vert.x 4 加入logback日志》
请注意根据官网介绍在同一个路由路径,多个handler的时候nex()调用,执行顺序是安注册顺序来的。同时也可以在不修改代码的情况下通过order来修改handler的顺序。
创建一个DemoInterceptorHandler
@Slf4j
public class DemoInterceptorHandler implements Handler<RoutingContext> {
@Override
public void handle(RoutingContext routingContext) {
log.info("DemoInterceptorHandler start ....");
String token = routingContext.request().getHeader("token");
log.info("DemoInterceptorHandler header token : {}",token);
routingContext.next();
log.info("DemoInterceptorHandler end ....");
}
public static DemoInterceptorHandler create() {
return new DemoInterceptorHandler();
}
}
代码聚焦
//order排序越小越靠前执行
router.route("/*").order(Integer.MIN_VALUE).handler(DemoInterceptorHandler.create());
/**
* 通过路径参数id获取单个产品
* @param routingContext 路由上下文
*/
private void getById(RoutingContext routingContext){
String id = routingContext.pathParam("id");
String token = routingContext.request().getHeader("token");
log.info("getById header token : {}",token);
Whisky whisky = products.get(Integer.parseInt(id));
if (whisky == null) {
throw new BusinessException(481,"未找到相关产品信息:id-"+id);
}
routingContext.response()
.putHeader("content-type", "application/json; charset=utf-8")
.end(Json.encodePrettily(whisky));
}
执行获取单个产品信息逻辑,查看控制台
从日志可以看到执行顺序永远都是拦截器的handler优先于具体接口的handler方法。故此可用作Vert.x的Interceptor功能。
http://blog.xqlee.com/article/2408121914053896.html