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));
}
本文深入解析了DispatcherHandler在处理请求时的工作流程,包括通过handlerMappings查找合适的handler,以及在未找到handler时的错误处理策略。文章详细介绍了如何迭代所有handlerMapping,查找并匹配到合适的handler,以及后续的调用和结果处理过程。
6934

被折叠的 条评论
为什么被折叠?



