/** * Create a new {@code ServerRequest} based on the given {@code ServerWebExchange} and * message readers. * @param exchange the exchange * @param messageReaders the message readers * @return the created {@code ServerRequest} */ static ServerRequest create(ServerWebExchange exchange, List<HttpMessageReader<?>> messageReaders) { return new DefaultServerRequest(exchange, messageReaders); }
@Override public <T> Mono<T> bodyToMono(ParameterizedTypeReference<T> typeReference) { Mono<T> mono = body(BodyExtractors.toMono(typeReference)); return mono.onErrorMap(UnsupportedMediaTypeException.class, ERROR_MAPPER) .onErrorMap(DecodingException.class, DECODING_MAPPER); }
@Override public <T> T body(BodyExtractor<T, ? super ServerHttpRequest> extractor, Map<String, Object> hints) { hints = Hints.merge(hints, Hints.LOG_PREFIX_HINT, exchange().getLogPrefix()); return bodyInternal(extractor, hints); }
@Test public void queryParams() { DefaultServerRequest request = new DefaultServerRequest( MockServerWebExchange.from(MockServerHttpRequest.method(HttpMethod.GET, "http://example.com?foo=bar")), this.messageReaders); assertEquals(Optional.of("bar"), request.queryParam("foo")); }
@Test public void bodyToMono() { DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); DefaultDataBuffer dataBuffer = factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); Flux<DataBuffer> body = Flux.just(dataBuffer); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.TEXT_PLAIN); MockServerHttpRequest mockRequest = MockServerHttpRequest .method(HttpMethod.GET, "http://example.com?foo=bar") .headers(httpHeaders) .body(body); DefaultServerRequest request = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), messageReaders); Mono<String> resultMono = request.bodyToMono(String.class); assertEquals("foo", resultMono.block()); }
@Test public void bodyToFlux() { DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); DefaultDataBuffer dataBuffer = factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); Flux<DataBuffer> body = Flux.just(dataBuffer); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.TEXT_PLAIN); MockServerHttpRequest mockRequest = MockServerHttpRequest .method(HttpMethod.GET, "http://example.com?foo=bar") .headers(httpHeaders) .body(body); DefaultServerRequest request = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), messageReaders); Flux<String> resultFlux = request.bodyToFlux(String.class); assertEquals(Collections.singletonList("foo"), resultFlux.collectList().block()); }
@Override public PathContainer pathContainer() { return request().getPath(); }
@Test public void body() { DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); DefaultDataBuffer dataBuffer = factory.wrap(ByteBuffer.wrap("foo".getBytes(StandardCharsets.UTF_8))); Flux<DataBuffer> body = Flux.just(dataBuffer); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.TEXT_PLAIN); MockServerHttpRequest mockRequest = MockServerHttpRequest .method(HttpMethod.GET, "http://example.com?foo=bar") .headers(httpHeaders) .body(body); DefaultServerRequest request = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), messageReaders); Mono<String> resultMono = request.body(toMono(String.class)); assertEquals("foo", resultMono.block()); }
@Test(expected = IllegalArgumentException.class) public void pathVariableNotFound() { MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("http://example.com")); Map<String, String> pathVariables = Collections.singletonMap("foo", "bar"); exchange.getAttributes().put(RouterFunctions.URI_TEMPLATE_VARIABLES_ATTRIBUTE, pathVariables); DefaultServerRequest request = new DefaultServerRequest(exchange, messageReaders); request.pathVariable("baz"); }
@Test public void uri() { URI uri = URI.create("https://example.com"); DefaultServerRequest request = new DefaultServerRequest( MockServerWebExchange.from(MockServerHttpRequest.method(HttpMethod.GET, uri)), this.messageReaders); assertEquals(uri, request.uri()); }
@Test public void method() { HttpMethod method = HttpMethod.HEAD; DefaultServerRequest request = new DefaultServerRequest( MockServerWebExchange.from(MockServerHttpRequest.method(method, "http://example.com")), this.messageReaders); assertEquals(method, request.method()); }
@Test public void attribute() { MockServerWebExchange exchange = MockServerWebExchange.from( MockServerHttpRequest.method(HttpMethod.GET, "http://example.com")); exchange.getAttributes().put("foo", "bar"); DefaultServerRequest request = new DefaultServerRequest(exchange, messageReaders); assertEquals(Optional.of("bar"), request.attribute("foo")); }
@Test public void pathVariables() { MockServerWebExchange exchange = MockServerWebExchange.from(MockServerHttpRequest.get("http://example.com")); Map<String, String> pathVariables = Collections.singletonMap("foo", "bar"); exchange.getAttributes().put(RouterFunctions.URI_TEMPLATE_VARIABLES_ATTRIBUTE, pathVariables); DefaultServerRequest request = new DefaultServerRequest(exchange, messageReaders); assertEquals(pathVariables, request.pathVariables()); }
@Test public void cookies() { HttpCookie cookie = new HttpCookie("foo", "bar"); MockServerWebExchange exchange = MockServerWebExchange.from( MockServerHttpRequest.method(HttpMethod.GET, "http://example.com").cookie(cookie)); DefaultServerRequest request = new DefaultServerRequest(exchange, messageReaders); MultiValueMap<String, HttpCookie> expected = new LinkedMultiValueMap<>(); expected.add("foo", cookie); assertEquals(expected, request.cookies()); }
@Test public void uriBuilder() throws URISyntaxException { URI uri = new URI("http", "localhost", "/path", "a=1", null); DefaultServerRequest request = new DefaultServerRequest( MockServerWebExchange.from(MockServerHttpRequest.method(HttpMethod.GET, uri)), this.messageReaders); URI result = request.uriBuilder().build(); assertEquals("http", result.getScheme()); assertEquals("localhost", result.getHost()); assertEquals(-1, result.getPort()); assertEquals("/path", result.getPath()); assertEquals("a=1", result.getQuery()); }
@Test public void formData() { DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); DefaultDataBuffer dataBuffer = factory.wrap(ByteBuffer.wrap("foo=bar&baz=qux".getBytes(StandardCharsets.UTF_8))); Flux<DataBuffer> body = Flux.just(dataBuffer); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MockServerHttpRequest mockRequest = MockServerHttpRequest .method(HttpMethod.GET, "http://example.com") .headers(httpHeaders) .body(body); DefaultServerRequest request = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList()); Mono<MultiValueMap<String, String>> resultData = request.formData(); StepVerifier.create(resultData) .consumeNextWith(formData -> { assertEquals(2, formData.size()); assertEquals("bar", formData.getFirst("foo")); assertEquals("qux", formData.getFirst("baz")); }) .verifyComplete(); }
@Test public void header() { HttpHeaders httpHeaders = new HttpHeaders(); List<MediaType> accept = Collections.singletonList(MediaType.APPLICATION_JSON); httpHeaders.setAccept(accept); List<Charset> acceptCharset = Collections.singletonList(StandardCharsets.UTF_8); httpHeaders.setAcceptCharset(acceptCharset); long contentLength = 42L; httpHeaders.setContentLength(contentLength); MediaType contentType = MediaType.TEXT_PLAIN; httpHeaders.setContentType(contentType); InetSocketAddress host = InetSocketAddress.createUnresolved("localhost", 80); httpHeaders.setHost(host); List<HttpRange> range = Collections.singletonList(HttpRange.createByteRange(0, 42)); httpHeaders.setRange(range); DefaultServerRequest request = new DefaultServerRequest( MockServerWebExchange.from(MockServerHttpRequest .method(HttpMethod.GET, "http://example.com?foo=bar") .headers(httpHeaders)), this.messageReaders); ServerRequest.Headers headers = request.headers(); assertEquals(accept, headers.accept()); assertEquals(acceptCharset, headers.acceptCharset()); assertEquals(OptionalLong.of(contentLength), headers.contentLength()); assertEquals(Optional.of(contentType), headers.contentType()); assertEquals(httpHeaders, headers.asHttpHeaders()); }
.headers(httpHeaders) .body(body); DefaultServerRequest request = new DefaultServerRequest(MockServerWebExchange.from(mockRequest), Collections.emptyList()); Mono<MultiValueMap<String, Part>> resultData = request.multipartData(); StepVerifier.create(resultData) .consumeNextWith(formData -> {
@Test public void andBothSucceed() { RequestPredicate left = new AddAttributePredicate(true, "left", "baz"); RequestPredicate right = new AddAttributePredicate(true, "right", "qux"); RequestPredicate predicate = new RequestPredicates.AndRequestPredicate(left, right); boolean result = predicate.test(this.request); assertTrue(result); assertEquals("bar", this.request.attributes().get("exchange")); assertEquals("baz", this.request.attributes().get("left")); assertEquals("qux", this.request.attributes().get("right")); }