@Test public void toHttpHandlerWebFilter() { AtomicBoolean filterInvoked = new AtomicBoolean(); WebFilter webFilter = new WebFilter() { @Override public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) { filterInvoked.set(true); return chain.filter(exchange); } }; HandlerFunction<ServerResponse> handlerFunction = request -> ServerResponse.accepted().build(); RouterFunction<ServerResponse> routerFunction = RouterFunctions.route(RequestPredicates.all(), handlerFunction); HandlerStrategies handlerStrategies = HandlerStrategies.builder() .webFilter(webFilter).build(); HttpHandler result = RouterFunctions.toHttpHandler(routerFunction, handlerStrategies); assertNotNull(result); MockServerHttpRequest httpRequest = MockServerHttpRequest.get("http://localhost").build(); MockServerHttpResponse httpResponse = new MockServerHttpResponse(); result.handle(httpRequest, httpResponse).block(); assertEquals(HttpStatus.ACCEPTED, httpResponse.getStatusCode()); assertTrue(filterInvoked.get()); }
@Test public void accepted() { Mono<ServerResponse> result = ServerResponse.accepted().build(); StepVerifier.create(result) .expectNextMatches(response -> HttpStatus.ACCEPTED.equals(response.statusCode())) .expectComplete() .verify(); }
@Test public void toHttpHandlerNormal() { HandlerFunction<ServerResponse> handlerFunction = request -> ServerResponse.accepted().build(); RouterFunction<ServerResponse> routerFunction = RouterFunctions.route(RequestPredicates.all(), handlerFunction); HttpHandler result = RouterFunctions.toHttpHandler(routerFunction); assertNotNull(result); MockServerHttpRequest httpRequest = MockServerHttpRequest.get("http://localhost").build(); MockServerHttpResponse httpResponse = new MockServerHttpResponse(); result.handle(httpRequest, httpResponse).block(); assertEquals(HttpStatus.ACCEPTED, httpResponse.getStatusCode()); }
@Bean RouterFunction<ServerResponse> routes(final Flux<ServerSentEvent<Map>> processor, final Consumer<String> distributeEvent) { final ParameterizedTypeReference<Map<String, String>> type = new ParameterizedTypeReference<Map<String, String>>() {}; return route(GET("/**"), request -> ok().contentType(request.headers().accept().contains(TEXT_EVENT_STREAM) ? TEXT_EVENT_STREAM : APPLICATION_STREAM_JSON) .body(processor.map(s -> s), ServerSentEvent.class)) .andRoute(POST("/**"), request -> accepted().body(request.bodyToMono(type) .map(map -> map.getOrDefault("message", "")) .map(String::valueOf) .map(String::trim) .filter(s -> s.length() > 0) .doOnNext(distributeEvent) .map(m -> format("message '%s' accepted.", m)) .map(message -> singletonMap("response", message)) .subscribeOn(Schedulers.elastic()) .flatMap(Mono::just), Map.class)) ; }