@Override public Headers headers() { return this.request.headers(); }
@Override public Headers headers() { return this.delegate.headers(); }
@Override public boolean test(ServerRequest request) { return this.headersPredicate.test(request.headers()); }
@Test public void headers() { ServerRequest.Headers headers = mock(ServerRequest.Headers.class); when(mockRequest.headers()).thenReturn(headers); assertSame(headers, wrapper.headers()); }
public DefaultServerRequestBuilder(ServerRequest other) { Assert.notNull(other, "ServerRequest must not be null"); this.messageReaders = other.messageReaders(); this.exchange = other.exchange(); this.methodName = other.methodName(); this.uri = other.uri(); headers(headers -> headers.addAll(other.headers().asHttpHeaders())); cookies(cookies -> cookies.addAll(other.cookies())); attributes(attributes -> attributes.putAll(other.attributes())); }
@Test public void from() { MockServerHttpRequest request = MockServerHttpRequest.post("http://example.com") .header("foo", "bar") .build(); MockServerWebExchange exchange = MockServerWebExchange.from(request); ServerRequest other = ServerRequest.create(exchange, HandlerStrategies.withDefaults().messageReaders()); Flux<DataBuffer> body = Flux.just("baz") .map(s -> s.getBytes(StandardCharsets.UTF_8)) .map(dataBufferFactory::wrap); ServerRequest result = ServerRequest.from(other) .method(HttpMethod.HEAD) .headers(httpHeaders -> httpHeaders.set("foo", "baar")) .cookies(cookies -> cookies.set("baz", ResponseCookie.from("baz", "quux").build())) .body(body) .build(); assertEquals(HttpMethod.HEAD, result.method()); assertEquals(1, result.headers().asHttpHeaders().size()); assertEquals("baar", result.headers().asHttpHeaders().getFirst("foo")); assertEquals(1, result.cookies().size()); assertEquals("quux", result.cookies().getFirst("baz").getValue()); StepVerifier.create(result.bodyToFlux(String.class)) .expectNext("baz") .verifyComplete(); }
@Override public Headers headers() { return this.request.headers(); }
@Override public Headers headers() { return this.request.headers(); }
@Override public boolean test(ServerRequest request) { return this.headersPredicate.test(request.headers()); } }
public Mono<ServerResponse> delete(ServerRequest request) { List<String> appIdHeaders = request.headers().header(X_KGRAPH_APPID); String appId = request.pathVariable("id"); PregelGraphAlgorithm<Long, ?, ?, ?> algorithm = algorithms.remove(appId); algorithm.close(); return proxyDelete(appIdHeaders.isEmpty() ? group.getCurrentMembers().keySet() : Collections.emptySet(), appId) .then(ServerResponse.noContent().build()); }
@SuppressWarnings("unchecked") public Mono<ServerResponse> result(ServerRequest request) { List<String> appIdHeaders = request.headers().header(X_KGRAPH_APPID); String appId = request.pathVariable("id"); PregelGraphAlgorithm<Long, ?, ?, ?> algorithm = algorithms.get(appId); Flux<String> body = Flux.fromIterable(algorithm.result()).map(kv -> { log.trace("result: ({}, {})", kv.key, kv.value); return kv.key + " " + kv.value; }); body = proxyResult(appIdHeaders.isEmpty() ? group.getCurrentMembers().keySet() : Collections.emptySet(), appId, body); return ServerResponse.ok() .contentType(MediaType.TEXT_EVENT_STREAM) .body(BodyInserters.fromPublisher(body, String.class)); }
@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)) ; }
@Bean public RouterFunction<ServerResponse> monoRouterFunction(NameHandler nameHandler, GreetingHandler greetingHandler) { return route(GET("/"), serverRequest -> ServerResponse.ok().contentType(MediaType.TEXT_HTML).body( greetingHandler.getGreetingStringMono(serverRequest.headers().asHttpHeaders(). getAcceptLanguageAsLocales().get(0).toLanguageTag()).concatWith(Mono.just(" ")). concatWith(nameHandler.getNameStringMono()), String.class)); }
public Mono<ServerResponse> run(ServerRequest request) { List<String> appIdHeaders = request.headers().header(X_KGRAPH_APPID); String appId = request.pathVariable("id"); return request.bodyToMono(GraphAlgorithmRunRequest.class) .flatMapMany(input -> { log.debug("num iterations: {}", input.getNumIterations()); PregelGraphAlgorithm<Long, ?, ?, ?> algorithm = algorithms.get(appId); GraphAlgorithmState state = algorithm.run(input.getNumIterations()); GraphAlgorithmStatus status = new GraphAlgorithmStatus(state); Flux<GraphAlgorithmStatus> states = proxyRun(appIdHeaders.isEmpty() ? group.getCurrentMembers().keySet() : Collections.emptySet(), appId, input); return Mono.just(status).mergeWith(states); }) .reduce((state1, state2) -> state1) .flatMap(state -> ServerResponse.ok() .contentType(MediaType.APPLICATION_JSON) .body(Mono.just(state), GraphAlgorithmStatus.class) ); }
public Mono<ServerResponse> configure(ServerRequest request) { List<String> appIdHeaders = request.headers().header(X_KGRAPH_APPID); String appId = appIdHeaders.isEmpty() ? generateRandomString(8) : appIdHeaders.iterator().next(); return request.bodyToMono(GraphAlgorithmCreateRequest.class) .doOnNext(input -> { PregelGraphAlgorithm<Long, ?, ?, ?> algorithm = getAlgorithm(appId, input); StreamsBuilder builder = new StreamsBuilder(); Properties streamsConfig = streamsConfig(appId, props.getBootstrapServers(), new KryoSerde<>()); algorithm.configure(builder, streamsConfig); algorithms.put(appId, algorithm); }) .flatMapMany(input -> proxyConfigure(appIdHeaders.isEmpty() ? group.getCurrentMembers().keySet() : Collections.emptySet(), appId, input)) .then(ServerResponse.ok() .contentType(MediaType.APPLICATION_JSON) .body(Mono.just(new GraphAlgorithmId(appId)), GraphAlgorithmId.class)); }
@Bean RouterFunction<ServerResponse> routes() { return route(GET("/api/v1/messages"), request -> ok().contentType(request.headers() .accept() .contains(TEXT_EVENT_STREAM) ? TEXT_EVENT_STREAM : APPLICATION_STREAM_JSON) .body(Flux.zip( Flux.interval(Duration.ofSeconds(1)), messages.findAll()) .map(Tuple2::getT2) .share(), Message.class)) .andRoute(POST("/api/v1/messages"), request -> ok().contentType(APPLICATION_JSON) .body(request.bodyToMono(Message.class) .flatMap(messages::save), Message.class)) .andRoute(GET("/"), request -> ok().render("index", Rendering.view("index") .modelAttribute("name", "Max") .build() .modelAttributes()) ); }