@Override public <T> Flux<T> bodyToFlux(ParameterizedTypeReference<T> typeReference) { return this.request.bodyToFlux(typeReference); }
@Override public <T> Flux<T> bodyToFlux(Class<? extends T> elementClass) { return this.request.bodyToFlux(elementClass); }
@Override public <T> Flux<T> bodyToFlux(Class<? extends T> elementClass) { return this.delegate.bodyToFlux(elementClass); }
@Override public <T> Flux<T> bodyToFlux(ParameterizedTypeReference<T> typeReference) { return this.delegate.bodyToFlux(typeReference); }
@Test public void bodyToFluxParameterizedTypeReference() { Flux<String> result = Flux.just("foo"); ParameterizedTypeReference<String> reference = new ParameterizedTypeReference<String>() {}; when(mockRequest.bodyToFlux(reference)).thenReturn(result); assertSame(result, wrapper.bodyToFlux(reference)); }
@Test public void bodyToFluxClass() { Flux<String> result = Flux.just("foo"); when(mockRequest.bodyToFlux(String.class)).thenReturn(result); assertSame(result, wrapper.bodyToFlux(String.class)); }
@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 <T> Flux<T> bodyToFlux(Class<? extends T> elementClass) { return this.request.bodyToFlux(elementClass); }
@Override public <T> Flux<T> bodyToFlux(Class<? extends T> elementClass) { return this.request.bodyToFlux(elementClass); }
@Bean public RouterFunction<?> userEndpoints() { return route(GET("/"), request -> ok().body(Mono.just("Hello"), String.class)) .andRoute(POST("/"), request -> ok().body( request.bodyToFlux(String.class) .map(value -> value.toUpperCase()), String.class)); }
public Mono<ServerResponse> saveUser(final ServerRequest request) { return ServerResponse.ok() .contentType(APPLICATION_STREAM_JSON) .body(request.bodyToFlux(User.class) .flatMap(users::save), User.class); } }
public Mono<ServerResponse> saveUser(final ServerRequest request) { return ServerResponse.ok() .contentType(APPLICATION_STREAM_JSON) .body(request.bodyToFlux(User.class) .flatMap(users::saveOne), User.class); } }
public Mono<ServerResponse> create(ServerRequest request) { Flux<Restaurant> restaurants = request.bodyToFlux(Restaurant.class); Flux<Restaurant> result = restaurants .buffer(10000) .flatMap(rs -> reactiveMongoTemplate.insert(rs, Restaurant.class)); return ok().contentType(APPLICATION_JSON_UTF8).body(result, Restaurant.class); }
@Bean RouterFunction<ServerResponse> routes(Source src, WebClient client) { return route(RequestPredicates.GET("/tags"), request -> { Publisher<String> map = client .get() .uri("http://localhost:8080/hashtags") .retrieve() .bodyToFlux(HashTag.class) .map(HashTag::getTag) .map(String::toUpperCase); Publisher<String> build = HystrixCommands .from(map) .fallback(Flux.just("EEEK!")) .eager() .commandName("fallback-uppercase-tags") .build(); return ServerResponse.ok().body(build, String.class); }) .andRoute(POST("/authors"), request -> { Flux<Boolean> map = request .bodyToFlux(Author.class) .map(Author::getHandle) .map(handle -> MessageBuilder.withPayload(handle).build()) .map(msg -> src.output().send(msg)); return ServerResponse.ok().body(map, Boolean.class); }); }