Browse Source

Consumer methods for WebHttpHandlerBuilder

Replace the more limited List-based methods to add filtes and exception
handlers with Consumer<List<?>> variants.
pull/1462/merge
Rossen Stoyanchev 8 years ago
parent
commit
c37c59f578
  1. 17
      spring-test/src/main/java/org/springframework/test/web/reactive/server/AbstractMockServerSpec.java
  2. 2
      spring-test/src/main/java/org/springframework/test/web/reactive/server/DefaultMockServerSpec.java
  3. 54
      spring-web/src/main/java/org/springframework/web/server/adapter/WebHttpHandlerBuilder.java
  4. 4
      spring-web/src/test/java/org/springframework/web/server/adapter/WebHttpHandlerBuilderTests.java
  5. 4
      spring-web/src/test/java/org/springframework/web/server/handler/FilteringWebHandlerTests.java
  6. 4
      spring-webflux/src/main/java/org/springframework/web/reactive/function/server/RouterFunctions.java
  7. 2
      spring-webflux/src/test/java/org/springframework/web/reactive/result/SimpleUrlHandlerMappingIntegrationTests.java

17
spring-test/src/main/java/org/springframework/test/web/reactive/server/AbstractMockServerSpec.java

@ -51,23 +51,20 @@ abstract class AbstractMockServerSpec<B extends WebTestClient.MockServerSpec<B>>
@Override @Override
public WebTestClient.Builder configureClient() { public WebTestClient.Builder configureClient() {
WebHttpHandlerBuilder builder = initHttpHandlerBuilder(); WebHttpHandlerBuilder builder = initHttpHandlerBuilder();
filtersInReverse().forEach(builder::prependFilter); builder.filters(currentFilters -> {
List<WebFilter> toPrepend = new ArrayList<>(this.filters);
Collections.reverse(toPrepend);
toPrepend.forEach(filter -> currentFilters.add(0, filter));
});
return new DefaultWebTestClientBuilder(builder.build()); return new DefaultWebTestClientBuilder(builder.build());
} }
/** /**
* Sub-classes to create the {@code WebHttpHandlerBuilder} to use. * Sub-classes must create an {@code WebHttpHandlerBuilder} that will then
* be used to create the HttpHandler for the mock server.
*/ */
protected abstract WebHttpHandlerBuilder initHttpHandlerBuilder(); protected abstract WebHttpHandlerBuilder initHttpHandlerBuilder();
/**
* Return the filters in reverse order for pre-pending.
*/
private List<WebFilter> filtersInReverse() {
List<WebFilter> result = new ArrayList<>(this.filters);
Collections.reverse(result);
return result;
}
@Override @Override
public WebTestClient build() { public WebTestClient build() {

2
spring-test/src/main/java/org/springframework/test/web/reactive/server/DefaultMockServerSpec.java

@ -20,6 +20,8 @@ import org.springframework.web.server.WebHandler;
import org.springframework.web.server.adapter.WebHttpHandlerBuilder; import org.springframework.web.server.adapter.WebHttpHandlerBuilder;
/** /**
* Simple extension of {@link AbstractMockServerSpec} that is given a target
* {@link WebHandler}.
* *
* @author Rossen Stoyanchev * @author Rossen Stoyanchev
* @since 5.0 * @since 5.0

54
spring-web/src/main/java/org/springframework/web/server/adapter/WebHttpHandlerBuilder.java

@ -17,7 +17,9 @@ package org.springframework.web.server.adapter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.function.Consumer;
import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -133,8 +135,8 @@ public class WebHttpHandlerBuilder {
SortedBeanContainer container = new SortedBeanContainer(); SortedBeanContainer container = new SortedBeanContainer();
context.getAutowireCapableBeanFactory().autowireBean(container); context.getAutowireCapableBeanFactory().autowireBean(container);
builder.filters(container.getFilters()); builder.filters(filters -> filters.addAll(container.getFilters()));
builder.exceptionHandlers(container.getExceptionHandlers()); builder.exceptionHandlers(handlers -> handlers.addAll(container.getExceptionHandlers()));
try { try {
builder.sessionManager( builder.sessionManager(
@ -166,8 +168,8 @@ public class WebHttpHandlerBuilder {
/** /**
* Add the given filter(s). * Add the given filter(s).
* @param filters the filter(s) to add * @param filters the filter(s) to add that's
that's */ */
public WebHttpHandlerBuilder filter(WebFilter... filters) { public WebHttpHandlerBuilder filter(WebFilter... filters) {
if (!ObjectUtils.isEmpty(filters)) { if (!ObjectUtils.isEmpty(filters)) {
this.filters.addAll(Arrays.asList(filters)); this.filters.addAll(Arrays.asList(filters));
@ -176,23 +178,11 @@ that's */
} }
/** /**
* Add the given filters. * Manipulate the "live" list of currently configured filters.
* @param filters the filters to add * @param consumer the consumer to use
*/
public WebHttpHandlerBuilder filters(List<? extends WebFilter> filters) {
if (!ObjectUtils.isEmpty(filters)) {
this.filters.addAll(filters);
}
return this;
}
/**
* Insert the given filter before other configured filters.
* @param filter the filters to insert
*/ */
public WebHttpHandlerBuilder prependFilter(WebFilter filter) { public WebHttpHandlerBuilder filters(Consumer<List<WebFilter>> consumer) {
Assert.notNull(filter, "WebFilter is required"); consumer.accept(this.filters);
this.filters.add(0, filter);
return this; return this;
} }
@ -208,23 +198,11 @@ that's */
} }
/** /**
* Add the given exception handlers. * Manipulate the "live" list of currently configured exception handlers.
* @param handlers the exception handlers * @param consumer the consumer to use
*/
public WebHttpHandlerBuilder exceptionHandlers(List<WebExceptionHandler> handlers) {
if (!ObjectUtils.isEmpty(handlers)) {
this.exceptionHandlers.addAll(handlers);
}
return this;
}
/**
* Insert the given exception handler before other configured handlers.
* @param handler the exception handler to insert
*/ */
public WebHttpHandlerBuilder prependExceptionHandler(WebExceptionHandler handler) { public WebHttpHandlerBuilder exceptionHandlers(Consumer<List<WebExceptionHandler>> consumer) {
Assert.notNull(handler, "WebExceptionHandler is required"); consumer.accept(this.exceptionHandlers);
this.exceptionHandlers.add(0, handler);
return this; return this;
} }
@ -288,9 +266,9 @@ that's */
private static class SortedBeanContainer { private static class SortedBeanContainer {
private List<WebFilter> filters; private List<WebFilter> filters = Collections.emptyList();
private List<WebExceptionHandler> exceptionHandlers; private List<WebExceptionHandler> exceptionHandlers = Collections.emptyList();
@Autowired(required = false) @Autowired(required = false)

4
spring-web/src/test/java/org/springframework/web/server/adapter/WebHttpHandlerBuilderTests.java

@ -36,8 +36,8 @@ import org.springframework.web.server.WebExceptionHandler;
import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebHandler; import org.springframework.web.server.WebHandler;
import static java.time.Duration.*; import static java.time.Duration.ofMillis;
import static org.junit.Assert.*; import static org.junit.Assert.assertEquals;
/** /**
* Unit tests for {@link WebHttpHandlerBuilder}. * Unit tests for {@link WebHttpHandlerBuilder}.

4
spring-web/src/test/java/org/springframework/web/server/handler/FilteringWebHandlerTests.java

@ -119,8 +119,8 @@ public class FilteringWebHandlerTests {
TestExceptionHandler exceptionHandler = new TestExceptionHandler(); TestExceptionHandler exceptionHandler = new TestExceptionHandler();
WebHttpHandlerBuilder.webHandler(new StubWebHandler()) WebHttpHandlerBuilder.webHandler(new StubWebHandler())
.filters(Collections.singletonList(new ExceptionFilter())) .filter(new ExceptionFilter())
.exceptionHandlers(Collections.singletonList(exceptionHandler)).build() .exceptionHandler(exceptionHandler).build()
.handle(request, response) .handle(request, response)
.block(); .block();

4
spring-webflux/src/main/java/org/springframework/web/reactive/function/server/RouterFunctions.java

@ -197,8 +197,8 @@ public abstract class RouterFunctions {
WebHandler webHandler = toWebHandler(routerFunction, strategies); WebHandler webHandler = toWebHandler(routerFunction, strategies);
return WebHttpHandlerBuilder.webHandler(webHandler) return WebHttpHandlerBuilder.webHandler(webHandler)
.filters(strategies.webFilters()) .filters(filters -> filters.addAll(strategies.webFilters()))
.exceptionHandlers(strategies.exceptionHandlers()) .exceptionHandlers(handlers -> handlers.addAll(strategies.exceptionHandlers()))
.localeContextResolver(strategies.localeContextResolver()) .localeContextResolver(strategies.localeContextResolver())
.build(); .build();
} }

2
spring-webflux/src/test/java/org/springframework/web/reactive/result/SimpleUrlHandlerMappingIntegrationTests.java

@ -63,7 +63,7 @@ public class SimpleUrlHandlerMappingIntegrationTests extends AbstractHttpHandler
wac.refresh(); wac.refresh();
return WebHttpHandlerBuilder.webHandler(new DispatcherHandler(wac)) return WebHttpHandlerBuilder.webHandler(new DispatcherHandler(wac))
.exceptionHandlers(Collections.singletonList(new ResponseStatusExceptionHandler())) .exceptionHandler(new ResponseStatusExceptionHandler())
.build(); .build();
} }

Loading…
Cancel
Save