Add getQueryParams to ServerHttpRequest

This commit is contained in:
Rossen Stoyanchev
2016-04-15 11:12:08 -04:00
parent 61136e614e
commit a7f32cd528
4 changed files with 125 additions and 7 deletions

View File

@@ -17,14 +17,15 @@ package org.springframework.http.server.reactive;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.springframework.http.HttpCookie;
import org.springframework.http.HttpHeaders;
import org.springframework.util.LinkedCaseInsensitiveMap;
import org.springframework.util.CollectionUtils;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.StringUtils;
/**
* Common base class for {@link ServerHttpRequest} implementations.
@@ -33,8 +34,13 @@ import org.springframework.util.MultiValueMap;
*/
public abstract class AbstractServerHttpRequest implements ServerHttpRequest {
private static final Pattern QUERY_PATTERN = Pattern.compile("([^&=]+)(=?)([^&]+)?");
private URI uri;
private MultiValueMap<String, String> queryParams;
private HttpHeaders headers;
private MultiValueMap<String, HttpCookie> cookies;
@@ -60,6 +66,30 @@ public abstract class AbstractServerHttpRequest implements ServerHttpRequest {
*/
protected abstract URI initUri() throws URISyntaxException;
@Override
public MultiValueMap<String, String> getQueryParams() {
if (this.queryParams == null) {
this.queryParams = CollectionUtils.unmodifiableMultiValueMap(initQueryParams());
}
return this.queryParams;
}
protected MultiValueMap<String, String> initQueryParams() {
MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>();
String query = getURI().getRawQuery();
if (query != null) {
Matcher matcher = QUERY_PATTERN.matcher(query);
while (matcher.find()) {
String name = matcher.group(1);
String eq = matcher.group(2);
String value = matcher.group(3);
value = (value != null ? value : (StringUtils.hasLength(eq) ? "" : null));
queryParams.add(name, value);
}
}
return queryParams;
}
@Override
public HttpHeaders getHeaders() {
if (this.headers == null) {
@@ -79,7 +109,7 @@ public abstract class AbstractServerHttpRequest implements ServerHttpRequest {
@Override
public MultiValueMap<String, HttpCookie> getCookies() {
if (this.cookies == null) {
this.cookies = new LinkedMultiValueMap<String, HttpCookie>();
this.cookies = new LinkedMultiValueMap<>();
initCookies(this.cookies);
}
return this.cookies;

View File

@@ -16,9 +16,6 @@
package org.springframework.http.server.reactive;
import java.util.List;
import java.util.Map;
import org.springframework.http.HttpCookie;
import org.springframework.http.HttpRequest;
import org.springframework.http.ReactiveHttpInputMessage;
@@ -31,6 +28,11 @@ import org.springframework.util.MultiValueMap;
*/
public interface ServerHttpRequest extends HttpRequest, ReactiveHttpInputMessage {
/**
* Return a read-only map with parsed and decoded query parameter values.
*/
MultiValueMap<String, String> getQueryParams();
/**
* Return a read-only map of cookies sent by the client.
*/