DispatcherHandler.toWebHandler/toHttpHandler convenience methods
This commit is contained in:
parent
5b33e02fb4
commit
65e01eabf0
|
|
@ -25,16 +25,17 @@ import org.apache.commons.logging.LogFactory;
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
import org.springframework.beans.BeansException;
|
|
||||||
import org.springframework.beans.factory.BeanFactoryUtils;
|
import org.springframework.beans.factory.BeanFactoryUtils;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.ApplicationContextAware;
|
import org.springframework.context.ApplicationContextAware;
|
||||||
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
|
import org.springframework.core.annotation.AnnotationAwareOrderComparator;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
|
import org.springframework.http.server.reactive.HttpHandler;
|
||||||
import org.springframework.http.server.reactive.ServerHttpRequest;
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
||||||
import org.springframework.web.server.ResponseStatusException;
|
import org.springframework.web.server.ResponseStatusException;
|
||||||
import org.springframework.web.server.ServerWebExchange;
|
import org.springframework.web.server.ServerWebExchange;
|
||||||
import org.springframework.web.server.WebHandler;
|
import org.springframework.web.server.WebHandler;
|
||||||
|
import org.springframework.web.server.adapter.HttpWebHandlerAdapter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Central dispatcher for HTTP request handlers/controllers. Dispatches to registered
|
* Central dispatcher for HTTP request handlers/controllers. Dispatches to registered
|
||||||
|
|
@ -57,13 +58,13 @@ import org.springframework.web.server.WebHandler;
|
||||||
*/
|
*/
|
||||||
public class DispatcherHandler implements WebHandler, ApplicationContextAware {
|
public class DispatcherHandler implements WebHandler, ApplicationContextAware {
|
||||||
|
|
||||||
private static final Log logger = LogFactory.getLog(DispatcherHandler.class);
|
|
||||||
|
|
||||||
@SuppressWarnings("ThrowableInstanceNeverThrown")
|
@SuppressWarnings("ThrowableInstanceNeverThrown")
|
||||||
private static final Exception HANDLER_NOT_FOUND_EXCEPTION =
|
private static final Exception HANDLER_NOT_FOUND_EXCEPTION =
|
||||||
new ResponseStatusException(HttpStatus.NOT_FOUND, "No matching handler");
|
new ResponseStatusException(HttpStatus.NOT_FOUND, "No matching handler");
|
||||||
|
|
||||||
|
|
||||||
|
private static final Log logger = LogFactory.getLog(DispatcherHandler.class);
|
||||||
|
|
||||||
private List<HandlerMapping> handlerMappings;
|
private List<HandlerMapping> handlerMappings;
|
||||||
|
|
||||||
private List<HandlerAdapter> handlerAdapters;
|
private List<HandlerAdapter> handlerAdapters;
|
||||||
|
|
@ -71,16 +72,24 @@ public class DispatcherHandler implements WebHandler, ApplicationContextAware {
|
||||||
private List<HandlerResultHandler> resultHandlers;
|
private List<HandlerResultHandler> resultHandlers;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new {@code DispatcherHandler} which needs to be configured with
|
||||||
|
* an {@link ApplicationContext} through {@link #setApplicationContext}.
|
||||||
|
*/
|
||||||
public DispatcherHandler() {
|
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) {
|
public DispatcherHandler(ApplicationContext applicationContext) {
|
||||||
initStrategies(applicationContext);
|
initStrategies(applicationContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
public void setApplicationContext(ApplicationContext applicationContext) {
|
||||||
initStrategies(applicationContext);
|
initStrategies(applicationContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -135,7 +144,7 @@ public class DispatcherHandler implements WebHandler, ApplicationContextAware {
|
||||||
}
|
}
|
||||||
|
|
||||||
private HandlerResultHandler getResultHandler(HandlerResult handlerResult) {
|
private HandlerResultHandler getResultHandler(HandlerResult handlerResult) {
|
||||||
for (HandlerResultHandler resultHandler : resultHandlers) {
|
for (HandlerResultHandler resultHandler : this.resultHandlers) {
|
||||||
if (resultHandler.supports(handlerResult)) {
|
if (resultHandler.supports(handlerResult)) {
|
||||||
return resultHandler;
|
return resultHandler;
|
||||||
}
|
}
|
||||||
|
|
@ -143,4 +152,28 @@ public class DispatcherHandler implements WebHandler, ApplicationContextAware {
|
||||||
throw new IllegalStateException("No HandlerResultHandler for " + handlerResult.getReturnValue());
|
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…
Reference in New Issue