Consumer methods for WebHttpHandlerBuilder
Replace the more limited List-based methods to add filtes and exception handlers with Consumer<List<?>> variants.
This commit is contained in:
parent
782c595cf7
commit
c37c59f578
|
|
@ -51,23 +51,20 @@ abstract class AbstractMockServerSpec<B extends WebTestClient.MockServerSpec<B>>
|
|||
@Override
|
||||
public WebTestClient.Builder configureClient() {
|
||||
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());
|
||||
}
|
||||
|
||||
/**
|
||||
* 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();
|
||||
|
||||
/**
|
||||
* 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
|
||||
public WebTestClient build() {
|
||||
|
|
|
|||
|
|
@ -20,6 +20,8 @@ import org.springframework.web.server.WebHandler;
|
|||
import org.springframework.web.server.adapter.WebHttpHandlerBuilder;
|
||||
|
||||
/**
|
||||
* Simple extension of {@link AbstractMockServerSpec} that is given a target
|
||||
* {@link WebHandler}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
* @since 5.0
|
||||
|
|
|
|||
|
|
@ -17,7 +17,9 @@ package org.springframework.web.server.adapter;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
|
@ -133,8 +135,8 @@ public class WebHttpHandlerBuilder {
|
|||
|
||||
SortedBeanContainer container = new SortedBeanContainer();
|
||||
context.getAutowireCapableBeanFactory().autowireBean(container);
|
||||
builder.filters(container.getFilters());
|
||||
builder.exceptionHandlers(container.getExceptionHandlers());
|
||||
builder.filters(filters -> filters.addAll(container.getFilters()));
|
||||
builder.exceptionHandlers(handlers -> handlers.addAll(container.getExceptionHandlers()));
|
||||
|
||||
try {
|
||||
builder.sessionManager(
|
||||
|
|
@ -166,8 +168,8 @@ public class WebHttpHandlerBuilder {
|
|||
|
||||
/**
|
||||
* Add the given filter(s).
|
||||
* @param filters the filter(s) to add
|
||||
that's */
|
||||
* @param filters the filter(s) to add that's
|
||||
*/
|
||||
public WebHttpHandlerBuilder filter(WebFilter... filters) {
|
||||
if (!ObjectUtils.isEmpty(filters)) {
|
||||
this.filters.addAll(Arrays.asList(filters));
|
||||
|
|
@ -176,23 +178,11 @@ that's */
|
|||
}
|
||||
|
||||
/**
|
||||
* Add the given filters.
|
||||
* @param filters the filters to add
|
||||
* Manipulate the "live" list of currently configured filters.
|
||||
* @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) {
|
||||
Assert.notNull(filter, "WebFilter is required");
|
||||
this.filters.add(0, filter);
|
||||
public WebHttpHandlerBuilder filters(Consumer<List<WebFilter>> consumer) {
|
||||
consumer.accept(this.filters);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -208,23 +198,11 @@ that's */
|
|||
}
|
||||
|
||||
/**
|
||||
* Add the given exception handlers.
|
||||
* @param handlers the exception handlers
|
||||
* Manipulate the "live" list of currently configured 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) {
|
||||
Assert.notNull(handler, "WebExceptionHandler is required");
|
||||
this.exceptionHandlers.add(0, handler);
|
||||
public WebHttpHandlerBuilder exceptionHandlers(Consumer<List<WebExceptionHandler>> consumer) {
|
||||
consumer.accept(this.exceptionHandlers);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
@ -288,9 +266,9 @@ that's */
|
|||
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -36,8 +36,8 @@ import org.springframework.web.server.WebExceptionHandler;
|
|||
import org.springframework.web.server.WebFilter;
|
||||
import org.springframework.web.server.WebHandler;
|
||||
|
||||
import static java.time.Duration.*;
|
||||
import static org.junit.Assert.*;
|
||||
import static java.time.Duration.ofMillis;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link WebHttpHandlerBuilder}.
|
||||
|
|
|
|||
|
|
@ -119,8 +119,8 @@ public class FilteringWebHandlerTests {
|
|||
TestExceptionHandler exceptionHandler = new TestExceptionHandler();
|
||||
|
||||
WebHttpHandlerBuilder.webHandler(new StubWebHandler())
|
||||
.filters(Collections.singletonList(new ExceptionFilter()))
|
||||
.exceptionHandlers(Collections.singletonList(exceptionHandler)).build()
|
||||
.filter(new ExceptionFilter())
|
||||
.exceptionHandler(exceptionHandler).build()
|
||||
.handle(request, response)
|
||||
.block();
|
||||
|
||||
|
|
|
|||
|
|
@ -197,8 +197,8 @@ public abstract class RouterFunctions {
|
|||
|
||||
WebHandler webHandler = toWebHandler(routerFunction, strategies);
|
||||
return WebHttpHandlerBuilder.webHandler(webHandler)
|
||||
.filters(strategies.webFilters())
|
||||
.exceptionHandlers(strategies.exceptionHandlers())
|
||||
.filters(filters -> filters.addAll(strategies.webFilters()))
|
||||
.exceptionHandlers(handlers -> handlers.addAll(strategies.exceptionHandlers()))
|
||||
.localeContextResolver(strategies.localeContextResolver())
|
||||
.build();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ public class SimpleUrlHandlerMappingIntegrationTests extends AbstractHttpHandler
|
|||
wac.refresh();
|
||||
|
||||
return WebHttpHandlerBuilder.webHandler(new DispatcherHandler(wac))
|
||||
.exceptionHandlers(Collections.singletonList(new ResponseStatusExceptionHandler()))
|
||||
.exceptionHandler(new ResponseStatusExceptionHandler())
|
||||
.build();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue