Browse Source

DispatcherHandler.toWebHandler/toHttpHandler convenience methods

pull/1183/head
Juergen Hoeller 9 years ago
parent
commit
65e01eabf0
  1. 43
      spring-web-reactive/src/main/java/org/springframework/web/reactive/DispatcherHandler.java

43
spring-web-reactive/src/main/java/org/springframework/web/reactive/DispatcherHandler.java

@ -25,16 +25,17 @@ import org.apache.commons.logging.LogFactory; @@ -25,16 +25,17 @@ import org.apache.commons.logging.LogFactory;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.HttpHandler;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.web.server.ResponseStatusException;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebHandler;
import org.springframework.web.server.adapter.HttpWebHandlerAdapter;
/**
* Central dispatcher for HTTP request handlers/controllers. Dispatches to registered
@ -57,13 +58,13 @@ import org.springframework.web.server.WebHandler; @@ -57,13 +58,13 @@ import org.springframework.web.server.WebHandler;
*/
public class DispatcherHandler implements WebHandler, ApplicationContextAware {
private static final Log logger = LogFactory.getLog(DispatcherHandler.class);
@SuppressWarnings("ThrowableInstanceNeverThrown")
private static final Exception HANDLER_NOT_FOUND_EXCEPTION =
new ResponseStatusException(HttpStatus.NOT_FOUND, "No matching handler");
private static final Log logger = LogFactory.getLog(DispatcherHandler.class);
private List<HandlerMapping> handlerMappings;
private List<HandlerAdapter> handlerAdapters;
@ -71,16 +72,24 @@ public class DispatcherHandler implements WebHandler, ApplicationContextAware { @@ -71,16 +72,24 @@ public class DispatcherHandler implements WebHandler, ApplicationContextAware {
private List<HandlerResultHandler> resultHandlers;
/**
* Create a new {@code DispatcherHandler} which needs to be configured with
* an {@link ApplicationContext} through {@link #setApplicationContext}.
*/
public DispatcherHandler() {
}
/**
* Create a new {@code DispatcherHandler} for the given {@link ApplicationContext}.
* @param applicationContext the application context to find the handler beans in
*/
public DispatcherHandler(ApplicationContext applicationContext) {
initStrategies(applicationContext);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
public void setApplicationContext(ApplicationContext applicationContext) {
initStrategies(applicationContext);
}
@ -135,7 +144,7 @@ public class DispatcherHandler implements WebHandler, ApplicationContextAware { @@ -135,7 +144,7 @@ public class DispatcherHandler implements WebHandler, ApplicationContextAware {
}
private HandlerResultHandler getResultHandler(HandlerResult handlerResult) {
for (HandlerResultHandler resultHandler : resultHandlers) {
for (HandlerResultHandler resultHandler : this.resultHandlers) {
if (resultHandler.supports(handlerResult)) {
return resultHandler;
}
@ -143,4 +152,28 @@ public class DispatcherHandler implements WebHandler, ApplicationContextAware { @@ -143,4 +152,28 @@ public class DispatcherHandler implements WebHandler, ApplicationContextAware {
throw new IllegalStateException("No HandlerResultHandler for " + handlerResult.getReturnValue());
}
/**
* Expose a dispatcher-based {@link WebHandler} for the given application context,
* typically for further configuration with filters and exception handlers through
* a {@link org.springframework.web.server.adapter.WebHttpHandlerBuilder}.
* @param applicationContext the application context to find the handler beans in
* @see #DispatcherHandler(ApplicationContext)
*/
public static WebHandler toWebHandler(ApplicationContext applicationContext) {
return new DispatcherHandler(applicationContext);
}
/**
* Expose a dispatcher-based {@link HttpHandler} for the given application context,
* typically for direct registration with an engine adapter such as
* {@link org.springframework.http.server.reactive.ReactorHttpHandlerAdapter}.
* @param applicationContext the application context to find the handler beans in
* @see #DispatcherHandler(ApplicationContext)
* @see HttpWebHandlerAdapter
*/
public static HttpHandler toHttpHandler(ApplicationContext applicationContext) {
return new HttpWebHandlerAdapter(new DispatcherHandler(applicationContext));
}
}

Loading…
Cancel
Save