Add ServerRequest.cookies()
This commit introduces a cookies() method on ServerRequest, returning a MultiValueMap<String, HttpCookie>. Issue: SPR-15715
This commit is contained in:
		
							parent
							
								
									621df7c978
								
							
						
					
					
						commit
						930f0f1760
					
				|  | @ -20,6 +20,7 @@ import java.net.InetSocketAddress; | ||||||
| import java.net.URI; | import java.net.URI; | ||||||
| import java.nio.charset.Charset; | import java.nio.charset.Charset; | ||||||
| import java.security.Principal; | import java.security.Principal; | ||||||
|  | import java.util.Arrays; | ||||||
| import java.util.Collections; | import java.util.Collections; | ||||||
| import java.util.LinkedHashMap; | import java.util.LinkedHashMap; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  | @ -32,6 +33,7 @@ import java.util.concurrent.ConcurrentHashMap; | ||||||
| import reactor.core.publisher.Flux; | import reactor.core.publisher.Flux; | ||||||
| import reactor.core.publisher.Mono; | import reactor.core.publisher.Mono; | ||||||
| 
 | 
 | ||||||
|  | import org.springframework.http.HttpCookie; | ||||||
| import org.springframework.http.HttpHeaders; | import org.springframework.http.HttpHeaders; | ||||||
| import org.springframework.http.HttpMethod; | import org.springframework.http.HttpMethod; | ||||||
| import org.springframework.http.HttpRange; | import org.springframework.http.HttpRange; | ||||||
|  | @ -59,6 +61,8 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 
 | 
 | ||||||
| 	private final MockHeaders headers; | 	private final MockHeaders headers; | ||||||
| 
 | 
 | ||||||
|  | 	private final MultiValueMap<String, HttpCookie> cookies; | ||||||
|  | 
 | ||||||
| 	@Nullable | 	@Nullable | ||||||
| 	private final Object body; | 	private final Object body; | ||||||
| 
 | 
 | ||||||
|  | @ -75,13 +79,15 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 	private Principal principal; | 	private Principal principal; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 	private MockServerRequest(HttpMethod method, URI uri, MockHeaders headers, @Nullable Object body, | 	private MockServerRequest(HttpMethod method, URI uri, MockHeaders headers, | ||||||
|  | 			MultiValueMap<String, HttpCookie> cookies, @Nullable Object body, | ||||||
| 			Map<String, Object> attributes, MultiValueMap<String, String> queryParams, | 			Map<String, Object> attributes, MultiValueMap<String, String> queryParams, | ||||||
| 			Map<String, String> pathVariables, @Nullable WebSession session, @Nullable Principal principal) { | 			Map<String, String> pathVariables, @Nullable WebSession session, @Nullable Principal principal) { | ||||||
| 
 | 
 | ||||||
| 		this.method = method; | 		this.method = method; | ||||||
| 		this.uri = uri; | 		this.uri = uri; | ||||||
| 		this.headers = headers; | 		this.headers = headers; | ||||||
|  | 		this.cookies = cookies; | ||||||
| 		this.body = body; | 		this.body = body; | ||||||
| 		this.attributes = attributes; | 		this.attributes = attributes; | ||||||
| 		this.queryParams = queryParams; | 		this.queryParams = queryParams; | ||||||
|  | @ -106,6 +112,11 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 		return this.headers; | 		return this.headers; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public MultiValueMap<String, HttpCookie> cookies() { | ||||||
|  | 		return this.cookies; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	@Override | 	@Override | ||||||
| 	@SuppressWarnings("unchecked") | 	@SuppressWarnings("unchecked") | ||||||
| 	public <S> S body(BodyExtractor<S, ? super ServerHttpRequest> extractor) { | 	public <S> S body(BodyExtractor<S, ? super ServerHttpRequest> extractor) { | ||||||
|  | @ -182,6 +193,10 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 
 | 
 | ||||||
| 		Builder headers(HttpHeaders headers); | 		Builder headers(HttpHeaders headers); | ||||||
| 
 | 
 | ||||||
|  | 		Builder cookie(HttpCookie... cookies); | ||||||
|  | 
 | ||||||
|  | 		Builder cookies(MultiValueMap<String, HttpCookie> cookies); | ||||||
|  | 
 | ||||||
| 		Builder attribute(String name, Object value); | 		Builder attribute(String name, Object value); | ||||||
| 
 | 
 | ||||||
| 		Builder attributes(Map<String, Object> attributes); | 		Builder attributes(Map<String, Object> attributes); | ||||||
|  | @ -212,6 +227,8 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 
 | 
 | ||||||
| 		private MockHeaders headers = new MockHeaders(new HttpHeaders()); | 		private MockHeaders headers = new MockHeaders(new HttpHeaders()); | ||||||
| 
 | 
 | ||||||
|  | 		private MultiValueMap<String, HttpCookie> cookies = new LinkedMultiValueMap<>(); | ||||||
|  | 
 | ||||||
| 		@Nullable | 		@Nullable | ||||||
| 		private Object body; | 		private Object body; | ||||||
| 
 | 
 | ||||||
|  | @ -241,6 +258,19 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 			return this; | 			return this; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		@Override | ||||||
|  | 		public Builder cookie(HttpCookie... cookies) { | ||||||
|  | 			Arrays.stream(cookies).forEach(cookie -> this.cookies.add(cookie.getName(), cookie)); | ||||||
|  | 			return this; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		@Override | ||||||
|  | 		public Builder cookies(MultiValueMap<String, HttpCookie> cookies) { | ||||||
|  | 			Assert.notNull(cookies, "'cookies' must not be null"); | ||||||
|  | 			this.cookies = cookies; | ||||||
|  | 			return this; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		@Override | 		@Override | ||||||
| 		public Builder header(String key, String value) { | 		public Builder header(String key, String value) { | ||||||
| 			Assert.notNull(key, "'key' must not be null"); | 			Assert.notNull(key, "'key' must not be null"); | ||||||
|  | @ -318,14 +348,14 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 		@Override | 		@Override | ||||||
| 		public MockServerRequest body(Object body) { | 		public MockServerRequest body(Object body) { | ||||||
| 			this.body = body; | 			this.body = body; | ||||||
| 			return new MockServerRequest(this.method, this.uri, this.headers, this.body, | 			return new MockServerRequest(this.method, this.uri, this.headers, this.cookies, | ||||||
| 					this.attributes, this.queryParams, this.pathVariables, this.session, | 					this.body, this.attributes, this.queryParams, this.pathVariables, this.session, | ||||||
| 					this.principal); | 					this.principal); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		@Override | 		@Override | ||||||
| 		public MockServerRequest build() { | 		public MockServerRequest build() { | ||||||
| 			return new MockServerRequest(this.method, this.uri, this.headers, null, | 			return new MockServerRequest(this.method, this.uri, this.headers, this.cookies, null, | ||||||
| 					this.attributes, this.queryParams, this.pathVariables, this.session, | 					this.attributes, this.queryParams, this.pathVariables, this.session, | ||||||
| 					this.principal); | 					this.principal); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | @ -32,6 +32,7 @@ import java.util.function.Function; | ||||||
| import reactor.core.publisher.Flux; | import reactor.core.publisher.Flux; | ||||||
| import reactor.core.publisher.Mono; | import reactor.core.publisher.Mono; | ||||||
| 
 | 
 | ||||||
|  | import org.springframework.http.HttpCookie; | ||||||
| import org.springframework.http.HttpHeaders; | import org.springframework.http.HttpHeaders; | ||||||
| import org.springframework.http.HttpMethod; | import org.springframework.http.HttpMethod; | ||||||
| import org.springframework.http.HttpRange; | import org.springframework.http.HttpRange; | ||||||
|  | @ -40,6 +41,7 @@ import org.springframework.http.codec.HttpMessageReader; | ||||||
| import org.springframework.http.server.reactive.ServerHttpRequest; | import org.springframework.http.server.reactive.ServerHttpRequest; | ||||||
| import org.springframework.http.server.reactive.ServerHttpResponse; | import org.springframework.http.server.reactive.ServerHttpResponse; | ||||||
| import org.springframework.util.Assert; | import org.springframework.util.Assert; | ||||||
|  | import org.springframework.util.MultiValueMap; | ||||||
| import org.springframework.web.reactive.function.BodyExtractor; | import org.springframework.web.reactive.function.BodyExtractor; | ||||||
| import org.springframework.web.reactive.function.BodyExtractors; | import org.springframework.web.reactive.function.BodyExtractors; | ||||||
| import org.springframework.web.reactive.function.UnsupportedMediaTypeException; | import org.springframework.web.reactive.function.UnsupportedMediaTypeException; | ||||||
|  | @ -95,6 +97,11 @@ class DefaultServerRequest implements ServerRequest { | ||||||
| 		return this.headers; | 		return this.headers; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public MultiValueMap<String, HttpCookie> cookies() { | ||||||
|  | 		return request().getCookies(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	@Override | 	@Override | ||||||
| 	public <T> T body(BodyExtractor<T, ? super ServerHttpRequest> extractor) { | 	public <T> T body(BodyExtractor<T, ? super ServerHttpRequest> extractor) { | ||||||
| 		return body(extractor, Collections.emptyMap()); | 		return body(extractor, Collections.emptyMap()); | ||||||
|  |  | ||||||
|  | @ -34,11 +34,13 @@ import org.apache.commons.logging.LogFactory; | ||||||
| import reactor.core.publisher.Flux; | import reactor.core.publisher.Flux; | ||||||
| import reactor.core.publisher.Mono; | import reactor.core.publisher.Mono; | ||||||
| 
 | 
 | ||||||
|  | import org.springframework.http.HttpCookie; | ||||||
| import org.springframework.http.HttpMethod; | import org.springframework.http.HttpMethod; | ||||||
| import org.springframework.http.MediaType; | import org.springframework.http.MediaType; | ||||||
| import org.springframework.http.server.reactive.ServerHttpRequest; | import org.springframework.http.server.reactive.ServerHttpRequest; | ||||||
| import org.springframework.lang.Nullable; | import org.springframework.lang.Nullable; | ||||||
| import org.springframework.util.Assert; | import org.springframework.util.Assert; | ||||||
|  | import org.springframework.util.MultiValueMap; | ||||||
| import org.springframework.web.reactive.function.BodyExtractor; | import org.springframework.web.reactive.function.BodyExtractor; | ||||||
| import org.springframework.web.server.WebSession; | import org.springframework.web.server.WebSession; | ||||||
| import org.springframework.web.util.UriUtils; | import org.springframework.web.util.UriUtils; | ||||||
|  | @ -490,6 +492,11 @@ public abstract class RequestPredicates { | ||||||
| 			return this.request.headers(); | 			return this.request.headers(); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		@Override | ||||||
|  | 		public MultiValueMap<String, HttpCookie> cookies() { | ||||||
|  | 			return this.request.cookies(); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		@Override | 		@Override | ||||||
| 		public <T> T body(BodyExtractor<T, ? super ServerHttpRequest> extractor) { | 		public <T> T body(BodyExtractor<T, ? super ServerHttpRequest> extractor) { | ||||||
| 			return this.request.body(extractor); | 			return this.request.body(extractor); | ||||||
|  |  | ||||||
|  | @ -29,6 +29,7 @@ import java.util.OptionalLong; | ||||||
| import reactor.core.publisher.Flux; | import reactor.core.publisher.Flux; | ||||||
| import reactor.core.publisher.Mono; | import reactor.core.publisher.Mono; | ||||||
| 
 | 
 | ||||||
|  | import org.springframework.http.HttpCookie; | ||||||
| import org.springframework.http.HttpHeaders; | import org.springframework.http.HttpHeaders; | ||||||
| import org.springframework.http.HttpMethod; | import org.springframework.http.HttpMethod; | ||||||
| import org.springframework.http.HttpRange; | import org.springframework.http.HttpRange; | ||||||
|  | @ -37,6 +38,7 @@ import org.springframework.http.codec.HttpMessageReader; | ||||||
| import org.springframework.http.codec.json.Jackson2CodecSupport; | import org.springframework.http.codec.json.Jackson2CodecSupport; | ||||||
| import org.springframework.http.server.reactive.ServerHttpRequest; | import org.springframework.http.server.reactive.ServerHttpRequest; | ||||||
| import org.springframework.lang.Nullable; | import org.springframework.lang.Nullable; | ||||||
|  | import org.springframework.util.MultiValueMap; | ||||||
| import org.springframework.web.reactive.function.BodyExtractor; | import org.springframework.web.reactive.function.BodyExtractor; | ||||||
| import org.springframework.web.server.ServerWebExchange; | import org.springframework.web.server.ServerWebExchange; | ||||||
| import org.springframework.web.server.WebSession; | import org.springframework.web.server.WebSession; | ||||||
|  | @ -75,6 +77,11 @@ public interface ServerRequest { | ||||||
| 	 */ | 	 */ | ||||||
| 	Headers headers(); | 	Headers headers(); | ||||||
| 
 | 
 | ||||||
|  | 	/** | ||||||
|  | 	 * Return the cookies of this request. | ||||||
|  | 	 */ | ||||||
|  | 	MultiValueMap<String, HttpCookie> cookies(); | ||||||
|  | 
 | ||||||
| 	/** | 	/** | ||||||
| 	 * Extract the body with the given {@code BodyExtractor}. | 	 * Extract the body with the given {@code BodyExtractor}. | ||||||
| 	 * @param extractor the {@code BodyExtractor} that reads from the request | 	 * @param extractor the {@code BodyExtractor} that reads from the request | ||||||
|  |  | ||||||
|  | @ -29,12 +29,14 @@ import java.util.OptionalLong; | ||||||
| import reactor.core.publisher.Flux; | import reactor.core.publisher.Flux; | ||||||
| import reactor.core.publisher.Mono; | import reactor.core.publisher.Mono; | ||||||
| 
 | 
 | ||||||
|  | import org.springframework.http.HttpCookie; | ||||||
| import org.springframework.http.HttpHeaders; | import org.springframework.http.HttpHeaders; | ||||||
| import org.springframework.http.HttpMethod; | import org.springframework.http.HttpMethod; | ||||||
| import org.springframework.http.HttpRange; | import org.springframework.http.HttpRange; | ||||||
| import org.springframework.http.MediaType; | import org.springframework.http.MediaType; | ||||||
| import org.springframework.http.server.reactive.ServerHttpRequest; | import org.springframework.http.server.reactive.ServerHttpRequest; | ||||||
| import org.springframework.util.Assert; | import org.springframework.util.Assert; | ||||||
|  | import org.springframework.util.MultiValueMap; | ||||||
| import org.springframework.web.reactive.function.BodyExtractor; | import org.springframework.web.reactive.function.BodyExtractor; | ||||||
| import org.springframework.web.reactive.function.server.HandlerFunction; | import org.springframework.web.reactive.function.server.HandlerFunction; | ||||||
| import org.springframework.web.reactive.function.server.ServerRequest; | import org.springframework.web.reactive.function.server.ServerRequest; | ||||||
|  | @ -90,6 +92,11 @@ public class ServerRequestWrapper implements ServerRequest { | ||||||
| 		return this.delegate.headers(); | 		return this.delegate.headers(); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public MultiValueMap<String, HttpCookie> cookies() { | ||||||
|  | 		return this.delegate.cookies(); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	@Override | 	@Override | ||||||
| 	public <T> T body(BodyExtractor<T, ? super ServerHttpRequest> extractor) { | 	public <T> T body(BodyExtractor<T, ? super ServerHttpRequest> extractor) { | ||||||
| 		return this.delegate.body(extractor); | 		return this.delegate.body(extractor); | ||||||
|  |  | ||||||
|  | @ -37,6 +37,7 @@ import org.springframework.core.codec.StringDecoder; | ||||||
| import org.springframework.core.io.buffer.DataBuffer; | import org.springframework.core.io.buffer.DataBuffer; | ||||||
| import org.springframework.core.io.buffer.DefaultDataBuffer; | import org.springframework.core.io.buffer.DefaultDataBuffer; | ||||||
| import org.springframework.core.io.buffer.DefaultDataBufferFactory; | import org.springframework.core.io.buffer.DefaultDataBufferFactory; | ||||||
|  | import org.springframework.http.HttpCookie; | ||||||
| import org.springframework.http.HttpHeaders; | import org.springframework.http.HttpHeaders; | ||||||
| import org.springframework.http.HttpMethod; | import org.springframework.http.HttpMethod; | ||||||
| import org.springframework.http.HttpRange; | import org.springframework.http.HttpRange; | ||||||
|  | @ -45,6 +46,8 @@ import org.springframework.http.codec.DecoderHttpMessageReader; | ||||||
| import org.springframework.http.codec.HttpMessageReader; | import org.springframework.http.codec.HttpMessageReader; | ||||||
| import org.springframework.mock.http.server.reactive.test.MockServerHttpRequest; | import org.springframework.mock.http.server.reactive.test.MockServerHttpRequest; | ||||||
| import org.springframework.mock.http.server.reactive.test.MockServerWebExchange; | import org.springframework.mock.http.server.reactive.test.MockServerWebExchange; | ||||||
|  | import org.springframework.util.LinkedMultiValueMap; | ||||||
|  | import org.springframework.util.MultiValueMap; | ||||||
| import org.springframework.web.server.UnsupportedMediaTypeStatusException; | import org.springframework.web.server.UnsupportedMediaTypeStatusException; | ||||||
| 
 | 
 | ||||||
| import static org.junit.Assert.*; | import static org.junit.Assert.*; | ||||||
|  | @ -176,6 +179,22 @@ public class DefaultServerRequestTests { | ||||||
| 		assertEquals(httpHeaders, headers.asHttpHeaders()); | 		assertEquals(httpHeaders, headers.asHttpHeaders()); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	@Test | ||||||
|  | 	public void cookies() { | ||||||
|  | 		HttpCookie cookie = new HttpCookie("foo", "bar"); | ||||||
|  | 		MockServerHttpRequest mockRequest = MockServerHttpRequest.method(HttpMethod.GET, "http://example.com"). | ||||||
|  | 				cookie(cookie).build(); | ||||||
|  | 		MockServerWebExchange exchange = new MockServerWebExchange(mockRequest); | ||||||
|  | 
 | ||||||
|  | 		DefaultServerRequest request = new DefaultServerRequest(exchange, messageReaders); | ||||||
|  | 
 | ||||||
|  | 		MultiValueMap<String, HttpCookie> expected = new LinkedMultiValueMap<>(); | ||||||
|  | 		expected.add("foo", cookie); | ||||||
|  | 
 | ||||||
|  | 		assertEquals(expected, request.cookies()); | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	@Test | 	@Test | ||||||
| 	public void body() throws Exception { | 	public void body() throws Exception { | ||||||
| 		DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); | 		DefaultDataBufferFactory factory = new DefaultDataBufferFactory(); | ||||||
|  |  | ||||||
|  | @ -20,6 +20,7 @@ import java.net.InetSocketAddress; | ||||||
| import java.net.URI; | import java.net.URI; | ||||||
| import java.nio.charset.Charset; | import java.nio.charset.Charset; | ||||||
| import java.security.Principal; | import java.security.Principal; | ||||||
|  | import java.util.Arrays; | ||||||
| import java.util.Collections; | import java.util.Collections; | ||||||
| import java.util.LinkedHashMap; | import java.util.LinkedHashMap; | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  | @ -32,6 +33,7 @@ import java.util.concurrent.ConcurrentHashMap; | ||||||
| import reactor.core.publisher.Flux; | import reactor.core.publisher.Flux; | ||||||
| import reactor.core.publisher.Mono; | import reactor.core.publisher.Mono; | ||||||
| 
 | 
 | ||||||
|  | import org.springframework.http.HttpCookie; | ||||||
| import org.springframework.http.HttpHeaders; | import org.springframework.http.HttpHeaders; | ||||||
| import org.springframework.http.HttpMethod; | import org.springframework.http.HttpMethod; | ||||||
| import org.springframework.http.HttpRange; | import org.springframework.http.HttpRange; | ||||||
|  | @ -57,6 +59,9 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 
 | 
 | ||||||
| 	private final MockHeaders headers; | 	private final MockHeaders headers; | ||||||
| 
 | 
 | ||||||
|  | 	private final MultiValueMap<String, HttpCookie> cookies; | ||||||
|  | 
 | ||||||
|  | 	@Nullable | ||||||
| 	private final Object body; | 	private final Object body; | ||||||
| 
 | 
 | ||||||
| 	private final Map<String, Object> attributes; | 	private final Map<String, Object> attributes; | ||||||
|  | @ -65,18 +70,21 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 
 | 
 | ||||||
| 	private final Map<String, String> pathVariables; | 	private final Map<String, String> pathVariables; | ||||||
| 
 | 
 | ||||||
|  | 	@Nullable | ||||||
| 	private final WebSession session; | 	private final WebSession session; | ||||||
| 
 | 
 | ||||||
|  | 	@Nullable | ||||||
| 	private Principal principal; | 	private Principal principal; | ||||||
| 
 | 
 | ||||||
| 	private MockServerRequest(HttpMethod method, URI uri, | 	private MockServerRequest(HttpMethod method, URI uri, | ||||||
| 			MockHeaders headers, @Nullable Object body, Map<String, Object> attributes, | 			MockHeaders headers, MultiValueMap<String, HttpCookie> cookies, @Nullable Object body, | ||||||
| 			MultiValueMap<String, String> queryParams, | 			Map<String, Object> attributes, MultiValueMap<String, String> queryParams, | ||||||
| 			Map<String, String> pathVariables, WebSession session, Principal principal) { | 			Map<String, String> pathVariables, @Nullable WebSession session, @Nullable Principal principal) { | ||||||
| 
 | 
 | ||||||
| 		this.method = method; | 		this.method = method; | ||||||
| 		this.uri = uri; | 		this.uri = uri; | ||||||
| 		this.headers = headers; | 		this.headers = headers; | ||||||
|  | 		this.cookies = cookies; | ||||||
| 		this.body = body; | 		this.body = body; | ||||||
| 		this.attributes = attributes; | 		this.attributes = attributes; | ||||||
| 		this.queryParams = queryParams; | 		this.queryParams = queryParams; | ||||||
|  | @ -101,27 +109,36 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 		return this.headers; | 		return this.headers; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	@Override | ||||||
|  | 	public MultiValueMap<String, HttpCookie> cookies() { | ||||||
|  | 		return this.cookies; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	@Override | 	@Override | ||||||
| 	@SuppressWarnings("unchecked") | 	@SuppressWarnings("unchecked") | ||||||
| 	public <S> S body(BodyExtractor<S, ? super ServerHttpRequest> extractor){ | 	public <S> S body(BodyExtractor<S, ? super ServerHttpRequest> extractor){ | ||||||
|  | 		Assert.state(this.body != null, "No body"); | ||||||
| 		return (S) this.body; | 		return (S) this.body; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Override | 	@Override | ||||||
| 	@SuppressWarnings("unchecked") | 	@SuppressWarnings("unchecked") | ||||||
| 	public <S> S body(BodyExtractor<S, ? super ServerHttpRequest> extractor, Map<String, Object> hints) { | 	public <S> S body(BodyExtractor<S, ? super ServerHttpRequest> extractor, Map<String, Object> hints) { | ||||||
|  | 		Assert.state(this.body != null, "No body"); | ||||||
| 		return (S) this.body; | 		return (S) this.body; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Override | 	@Override | ||||||
| 	@SuppressWarnings("unchecked") | 	@SuppressWarnings("unchecked") | ||||||
| 	public <S> Mono<S> bodyToMono(Class<? extends S> elementClass) { | 	public <S> Mono<S> bodyToMono(Class<? extends S> elementClass) { | ||||||
|  | 		Assert.state(this.body != null, "No body"); | ||||||
| 		return (Mono<S>) this.body; | 		return (Mono<S>) this.body; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	@Override | 	@Override | ||||||
| 	@SuppressWarnings("unchecked") | 	@SuppressWarnings("unchecked") | ||||||
| 	public <S> Flux<S> bodyToFlux(Class<? extends S> elementClass) { | 	public <S> Flux<S> bodyToFlux(Class<? extends S> elementClass) { | ||||||
|  | 		Assert.state(this.body != null, "No body"); | ||||||
| 		return (Flux<S>) this.body; | 		return (Flux<S>) this.body; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | @ -173,6 +190,10 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 
 | 
 | ||||||
| 		Builder headers(HttpHeaders headers); | 		Builder headers(HttpHeaders headers); | ||||||
| 
 | 
 | ||||||
|  | 		Builder cookie(HttpCookie... cookies); | ||||||
|  | 
 | ||||||
|  | 		Builder cookies(MultiValueMap<String, HttpCookie> cookies); | ||||||
|  | 
 | ||||||
| 		Builder attribute(String name, Object value); | 		Builder attribute(String name, Object value); | ||||||
| 
 | 
 | ||||||
| 		Builder attributes(Map<String, Object> attributes); | 		Builder attributes(Map<String, Object> attributes); | ||||||
|  | @ -203,6 +224,9 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 
 | 
 | ||||||
| 		private MockHeaders headers = new MockHeaders(new HttpHeaders()); | 		private MockHeaders headers = new MockHeaders(new HttpHeaders()); | ||||||
| 
 | 
 | ||||||
|  | 		private MultiValueMap<String, HttpCookie> cookies = new LinkedMultiValueMap<>(); | ||||||
|  | 
 | ||||||
|  | 		@Nullable | ||||||
| 		private Object body; | 		private Object body; | ||||||
| 
 | 
 | ||||||
| 		private Map<String, Object> attributes = new ConcurrentHashMap<>(); | 		private Map<String, Object> attributes = new ConcurrentHashMap<>(); | ||||||
|  | @ -211,8 +235,10 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 
 | 
 | ||||||
| 		private Map<String, String> pathVariables = new LinkedHashMap<>(); | 		private Map<String, String> pathVariables = new LinkedHashMap<>(); | ||||||
| 
 | 
 | ||||||
|  | 		@Nullable | ||||||
| 		private WebSession session; | 		private WebSession session; | ||||||
| 
 | 
 | ||||||
|  | 		@Nullable | ||||||
| 		private Principal principal; | 		private Principal principal; | ||||||
| 
 | 
 | ||||||
| 		@Override | 		@Override | ||||||
|  | @ -244,6 +270,19 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 			return this; | 			return this; | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
|  | 		@Override | ||||||
|  | 		public Builder cookie(HttpCookie... cookies) { | ||||||
|  | 			Arrays.stream(cookies).forEach(cookie -> this.cookies.add(cookie.getName(), cookie)); | ||||||
|  | 			return this; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		@Override | ||||||
|  | 		public Builder cookies(MultiValueMap<String, HttpCookie> cookies) { | ||||||
|  | 			Assert.notNull(cookies, "'cookies' must not be null"); | ||||||
|  | 			this.cookies = cookies; | ||||||
|  | 			return this; | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
| 		@Override | 		@Override | ||||||
| 		public Builder attribute(String name, Object value) { | 		public Builder attribute(String name, Object value) { | ||||||
| 			Assert.notNull(name, "'name' must not be null"); | 			Assert.notNull(name, "'name' must not be null"); | ||||||
|  | @ -306,14 +345,14 @@ public class MockServerRequest implements ServerRequest { | ||||||
| 		@Override | 		@Override | ||||||
| 		public MockServerRequest body(Object body) { | 		public MockServerRequest body(Object body) { | ||||||
| 			this.body = body; | 			this.body = body; | ||||||
| 			return new MockServerRequest(this.method, this.uri, this.headers, this.body, | 			return new MockServerRequest(this.method, this.uri, this.headers, this.cookies, | ||||||
| 					this.attributes, this.queryParams, this.pathVariables, this.session, | 					this.body, this.attributes, this.queryParams, this.pathVariables, this.session, | ||||||
| 					this.principal); | 					this.principal); | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		@Override | 		@Override | ||||||
| 		public MockServerRequest build() { | 		public MockServerRequest build() { | ||||||
| 			return new MockServerRequest(this.method, this.uri, this.headers, null, | 			return new MockServerRequest(this.method, this.uri, this.headers, this.cookies, null, | ||||||
| 					this.attributes, this.queryParams, this.pathVariables, this.session, | 					this.attributes, this.queryParams, this.pathVariables, this.session, | ||||||
| 					this.principal); | 					this.principal); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue