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.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;
|
|||
*/
|
||||
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 {
|
|||
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 {
|
|||
}
|
||||
|
||||
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 {
|
|||
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