Move RouterFunction WebHandler to inner class
This commit is contained in:
		
							parent
							
								
									7f1d5d790e
								
							
						
					
					
						commit
						edd86e5dd5
					
				| 
						 | 
				
			
			@ -77,8 +77,6 @@ public abstract class RouterFunctions {
 | 
			
		|||
			RouterFunctions.class.getName() + ".matchingPattern";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	private static final HandlerFunction<ServerResponse> NOT_FOUND_HANDLER =
 | 
			
		||||
			request -> ServerResponse.notFound().build();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -253,43 +251,9 @@ public abstract class RouterFunctions {
 | 
			
		|||
		Assert.notNull(routerFunction, "RouterFunction must not be null");
 | 
			
		||||
		Assert.notNull(strategies, "HandlerStrategies must not be null");
 | 
			
		||||
 | 
			
		||||
		return exchange -> {
 | 
			
		||||
			ServerRequest request = new DefaultServerRequest(exchange, strategies.messageReaders());
 | 
			
		||||
			addAttributes(exchange, request);
 | 
			
		||||
			return routerFunction.route(request)
 | 
			
		||||
					.defaultIfEmpty(notFound())
 | 
			
		||||
					.flatMap(handlerFunction -> wrapException(() -> handlerFunction.handle(request)))
 | 
			
		||||
					.flatMap(response -> wrapException(() -> response.writeTo(exchange,
 | 
			
		||||
							new HandlerStrategiesResponseContext(strategies))));
 | 
			
		||||
		};
 | 
			
		||||
		return new RouterFunctionWebHandler(strategies, routerFunction);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	private static <T> Mono<T> wrapException(Supplier<Mono<T>> supplier) {
 | 
			
		||||
		try {
 | 
			
		||||
			return supplier.get();
 | 
			
		||||
		}
 | 
			
		||||
		catch (Throwable ex) {
 | 
			
		||||
			return Mono.error(ex);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private static void addAttributes(ServerWebExchange exchange, ServerRequest request) {
 | 
			
		||||
		Map<String, Object> attributes = exchange.getAttributes();
 | 
			
		||||
		attributes.put(REQUEST_ATTRIBUTE, request);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@SuppressWarnings("unchecked")
 | 
			
		||||
	private static <T extends ServerResponse> HandlerFunction<T> notFound() {
 | 
			
		||||
		return (HandlerFunction<T>) NOT_FOUND_HANDLER;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@SuppressWarnings("unchecked")
 | 
			
		||||
	static <T extends ServerResponse> HandlerFunction<T> cast(HandlerFunction<?> handlerFunction) {
 | 
			
		||||
		return (HandlerFunction<T>) handlerFunction;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Represents a discoverable builder for router functions.
 | 
			
		||||
	 * Obtained via {@link RouterFunctions#route()}.
 | 
			
		||||
| 
						 | 
				
			
			@ -846,8 +810,13 @@ public abstract class RouterFunctions {
 | 
			
		|||
		@Override
 | 
			
		||||
		public Mono<HandlerFunction<ServerResponse>> route(ServerRequest request) {
 | 
			
		||||
			return this.first.route(request)
 | 
			
		||||
					.map(RouterFunctions::cast)
 | 
			
		||||
					.switchIfEmpty(Mono.defer(() -> this.second.route(request).map(RouterFunctions::cast)));
 | 
			
		||||
					.map(this::cast)
 | 
			
		||||
					.switchIfEmpty(Mono.defer(() -> this.second.route(request).map(this::cast)));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		@SuppressWarnings("unchecked")
 | 
			
		||||
		private <T extends ServerResponse> HandlerFunction<T> cast(HandlerFunction<?> handlerFunction) {
 | 
			
		||||
			return (HandlerFunction<T>) handlerFunction;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		@Override
 | 
			
		||||
| 
						 | 
				
			
			@ -1012,4 +981,51 @@ public abstract class RouterFunctions {
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	private static class RouterFunctionWebHandler implements WebHandler {
 | 
			
		||||
 | 
			
		||||
		private static final HandlerFunction<ServerResponse> NOT_FOUND_HANDLER =
 | 
			
		||||
				request -> ServerResponse.notFound().build();
 | 
			
		||||
 | 
			
		||||
		private final HandlerStrategies strategies;
 | 
			
		||||
 | 
			
		||||
		private final RouterFunction<?> routerFunction;
 | 
			
		||||
 | 
			
		||||
		public RouterFunctionWebHandler(HandlerStrategies strategies, RouterFunction<?> routerFunction) {
 | 
			
		||||
			this.strategies = strategies;
 | 
			
		||||
			this.routerFunction = routerFunction;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		@Override
 | 
			
		||||
		public Mono<Void> handle(ServerWebExchange exchange) {
 | 
			
		||||
			return Mono.defer(() -> {
 | 
			
		||||
				ServerRequest request = new DefaultServerRequest(exchange, this.strategies.messageReaders());
 | 
			
		||||
				addAttributes(exchange, request);
 | 
			
		||||
				return this.routerFunction.route(request)
 | 
			
		||||
						.defaultIfEmpty(notFound())
 | 
			
		||||
						.flatMap(handlerFunction -> wrapException(() -> handlerFunction.handle(request)))
 | 
			
		||||
						.flatMap(response -> wrapException(() -> response.writeTo(exchange,
 | 
			
		||||
								new HandlerStrategiesResponseContext(this.strategies))));
 | 
			
		||||
			});
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private void addAttributes(ServerWebExchange exchange, ServerRequest request) {
 | 
			
		||||
			Map<String, Object> attributes = exchange.getAttributes();
 | 
			
		||||
			attributes.put(REQUEST_ATTRIBUTE, request);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		@SuppressWarnings("unchecked")
 | 
			
		||||
		private static <T extends ServerResponse> HandlerFunction<T> notFound() {
 | 
			
		||||
			return (HandlerFunction<T>) NOT_FOUND_HANDLER;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		private static <T> Mono<T> wrapException(Supplier<Mono<T>> supplier) {
 | 
			
		||||
			try {
 | 
			
		||||
				return supplier.get();
 | 
			
		||||
			}
 | 
			
		||||
			catch (Throwable ex) {
 | 
			
		||||
				return Mono.error(ex);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue