@Bean public RouterFunction<?> handler() { return RouterFunctions.route() .GET("/sessionClassName", request -> request.session().flatMap(session -> { String className = session.getClass().getSimpleName(); return ServerResponse.ok().syncBody(className); })) .build(); }
@Test(expected = IllegalArgumentException.class) public void bodyObjectPublisher() { Mono<Void> mono = Mono.empty(); ServerResponse.ok().syncBody(mono); }
@Test public void notModifiedLastModified() { ZonedDateTime now = ZonedDateTime.now(); ZonedDateTime oneMinuteBeforeNow = now.minus(1, ChronoUnit.MINUTES); ServerResponse responseMono = ServerResponse.ok() .lastModified(oneMinuteBeforeNow) .syncBody("bar") .block(); MockServerHttpRequest request = MockServerHttpRequest.get("http://example.com") .header(HttpHeaders.IF_MODIFIED_SINCE, DateTimeFormatter.RFC_1123_DATE_TIME.format(now)) .build(); MockServerWebExchange exchange = MockServerWebExchange.from(request); responseMono.writeTo(exchange, EMPTY_CONTEXT); MockServerHttpResponse response = exchange.getResponse(); assertEquals(HttpStatus.NOT_MODIFIED, response.getStatusCode()); StepVerifier.create(response.getBody()) .expectError(IllegalStateException.class) .verify(); }
public static void main(String[] args) { SpringApplication application = new SpringApplication(GraalDemoApplication.class) { @Override protected void load(ApplicationContext context, Object[] sources) { // Disable the annotation bean definition reader because of https://github.com/oracle/graal/issues/630 } }; application.setWebApplicationType(WebApplicationType.REACTIVE); application.setApplicationContextClass(ReactiveWebServerApplicationContext.class); // Only functional registration is supported by now because of https://github.com/oracle/graal/issues/630 application.addInitializers((GenericApplicationContext context) -> { context.registerBean(AutowiredAnnotationBeanPostProcessor.class); context.registerBean(HttpHandler.class, () -> { HandlerStrategies strategies = HandlerStrategies.withDefaults(); RouterFunction<ServerResponse> router = RouterFunctions.route( RequestPredicates.GET("/"), serverRequest -> ServerResponse.ok().syncBody("Hello Graal")); return RouterFunctions.toHttpHandler(router, strategies); }); context.registerBean(ReactiveWebServerFactory.class, () -> new NettyReactiveWebServerFactory()); }); application.run(args); } }
public Mono<ServerResponse> getTime(ServerRequest serverRequest) { String timeType = serverRequest.queryParam("time").orElse("Now"); return getTimeByType(timeType).flatMap(s -> ServerResponse.ok() .contentType(MediaType.TEXT_PLAIN).syncBody(s)) .onErrorResume(e -> Mono.just("Error: " + e.getMessage()).flatMap(s -> ServerResponse.ok().contentType(MediaType.TEXT_PLAIN).syncBody(s))); }
@Test public void createHttpHandler() { HttpHandler httpHandler = RouterFunctions.toHttpHandler( route(path("/"), request -> ok().syncBody("Hello, WebFlux!!!")) ); }
public Mono<ServerResponse> get(ServerRequest req) { return this.posts.findById(Long.valueOf(req.pathVariable("id"))) .flatMap(post -> ok().syncBody(post)) .switchIfEmpty(notFound().build()); } }
@Test public void basicResponse() { ExchangeResult result = WebTestClient .bindToRouterFunction(RouterFunctions.route(GET("/foo"), (req) -> ServerResponse.ok().syncBody("Hello, World!"))) .configureClient().baseUrl("http://localhost").build().get().uri("/foo") .exchange().expectBody().returnResult(); OperationResponse response = this.converter.convert(result); assertThat(response.getStatus()).isEqualTo(HttpStatus.OK); assertThat(response.getContentAsString()).isEqualTo("Hello, World!"); assertThat(response.getHeaders().getContentType()) .isEqualTo(MediaType.parseMediaType("text/plain;charset=UTF-8")); assertThat(response.getHeaders().getContentLength()).isEqualTo(13); }
@Test public void notModifiedEtag() { String etag = "\"foo\""; ServerResponse responseMono = ServerResponse.ok() .eTag(etag) .syncBody("bar") .block(); MockServerHttpRequest request = MockServerHttpRequest.get("http://example.com") .header(HttpHeaders.IF_NONE_MATCH, etag) .build(); MockServerWebExchange exchange = MockServerWebExchange.from(request); responseMono.writeTo(exchange, EMPTY_CONTEXT); MockServerHttpResponse response = exchange.getResponse(); assertEquals(HttpStatus.NOT_MODIFIED, response.getStatusCode()); StepVerifier.create(response.getBody()) .expectError(IllegalStateException.class) .verify(); }
public Mono<ServerResponse> pattern(ServerRequest request) { String pattern = matchingPattern(request).getPatternString(); return ServerResponse.ok().syncBody(pattern); }
@Before public void start() throws Exception { HttpHandler httpHandler = RouterFunctions.toHttpHandler( route(GET("/test"), request -> ServerResponse.ok().syncBody("It works!"))); this.server = new ReactorHttpServer(); this.server.setHandler(httpHandler); this.server.afterPropertiesSet(); this.server.start(); this.client = WebTestClient.bindToServer() .baseUrl("http://localhost:" + this.server.getPort()) .build(); }
@Before public void setUp() throws Exception { RouterFunction<?> route = route(GET("/test"), request -> ServerResponse.ok().syncBody("It works!")); this.testClient = WebTestClient.bindToRouterFunction(route).build(); }