DispatcherHandler
1.入口
@Override
public Mono<Void> handle(ServerWebExchange exchange) {
//如没有 handlermapping 则直接返回一个错
if (this.handlerMappings == null) {
return Mono.error(HANDLER_NOT_FOUND_EXCEPTION);
}
//迭代所有handlermapping
return Flux.fromIterable(this.handlerMappings)
//查找合适的 handler
.concatMap(mapping -> mapping.getHandler(exchange))
.next()
//如果没有匹配到 handler 则返回一个错误
.switchIfEmpty(Mono.error(HANDLER_NOT_FOUND_EXCEPTION))
//匹配到合适的handler 后续处理
.flatMap(handler -> invokeHandler(exchange, handler))
//进一步处理 handler 返回的结果
.flatMap(result -> handleResult(exchange, result));
}