diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringDecoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringDecoder.java
index b499626778..59598f0ff1 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringDecoder.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringDecoder.java
@@ -26,6 +26,10 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import static io.netty.util.internal.ObjectUtil.checkNotNull;
+import static io.netty.util.internal.ObjectUtil.checkPositive;
+import static io.netty.util.internal.StringUtil.EMPTY_STRING;
+
/**
* Splits an HTTP query string into a path string and key-value parameter pairs.
* This decoder is for one time use only. Create a new instance for each URI:
@@ -102,16 +106,9 @@ public class QueryStringDecoder {
* specified charset.
*/
public QueryStringDecoder(String uri, Charset charset, boolean hasPath, int maxParams) {
- if (uri == null) {
- throw new NullPointerException("getUri");
- }
- if (charset == null) {
- throw new NullPointerException("charset");
- }
- if (maxParams <= 0) {
- throw new IllegalArgumentException(
- "maxParams: " + maxParams + " (expected: a positive integer)");
- }
+ checkNotNull(uri, "uri");
+ checkNotNull(charset, "charset");
+ checkPositive(maxParams, "maxParams");
this.uri = uri;
this.charset = charset;
@@ -140,26 +137,19 @@ public class QueryStringDecoder {
* specified charset.
*/
public QueryStringDecoder(URI uri, Charset charset, int maxParams) {
- if (uri == null) {
- throw new NullPointerException("getUri");
- }
- if (charset == null) {
- throw new NullPointerException("charset");
- }
- if (maxParams <= 0) {
- throw new IllegalArgumentException(
- "maxParams: " + maxParams + " (expected: a positive integer)");
- }
+ checkNotNull(uri, "uri");
+ checkNotNull(charset, "charset");
+ checkPositive(maxParams, "maxParams");
String rawPath = uri.getRawPath();
if (rawPath != null) {
hasPath = true;
} else {
- rawPath = "";
+ rawPath = EMPTY_STRING;
hasPath = false;
}
// Also take care of cut of things like "http://localhost"
- this.uri = rawPath + (uri.getRawQuery() == null? "" : '?' + uri.getRawQuery());
+ this.uri = uri.getRawQuery() == null? rawPath : rawPath + '?' + uri.getRawQuery();
this.charset = charset;
this.maxParams = maxParams;
@@ -178,10 +168,10 @@ public class QueryStringDecoder {
public String path() {
if (path == null) {
if (!hasPath) {
- path = "";
+ path = EMPTY_STRING;
} else {
int pathEndPos = uri.indexOf('?');
- path = decodeComponent(pathEndPos < 0 ? uri : uri.substring(0, pathEndPos), this.charset);
+ path = decodeComponent(pathEndPos < 0 ? uri : uri.substring(0, pathEndPos), charset);
}
}
return path;
@@ -230,7 +220,7 @@ public class QueryStringDecoder {
// We haven't seen an `=' so far but moved forward.
// Must be a param of the form '&a&' so add it with
// an empty value.
- if (!addParam(params, decodeComponent(s.substring(pos, i), charset), "")) {
+ if (!addParam(params, decodeComponent(s.substring(pos, i), charset), EMPTY_STRING)) {
return;
}
} else if (name != null) {
@@ -245,7 +235,7 @@ public class QueryStringDecoder {
if (pos != i) { // Are there characters we haven't dealt with?
if (name == null) { // Yes and we haven't seen any `='.
- addParam(params, decodeComponent(s.substring(pos, i), charset), "");
+ addParam(params, decodeComponent(s.substring(pos, i), charset), EMPTY_STRING);
} else { // Yes and this must be the last value.
addParam(params, name, decodeComponent(s.substring(pos, i), charset));
}
@@ -308,7 +298,7 @@ public class QueryStringDecoder {
*/
public static String decodeComponent(final String s, final Charset charset) {
if (s == null) {
- return "";
+ return EMPTY_STRING;
}
final int size = s.length();
boolean modified = false;
diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringEncoder.java b/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringEncoder.java
index 86d5ac6c5c..89d2deb988 100644
--- a/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringEncoder.java
+++ b/codec-http/src/main/java/io/netty/handler/codec/http/QueryStringEncoder.java
@@ -15,6 +15,8 @@
*/
package io.netty.handler.codec.http;
+import io.netty.util.internal.ObjectUtil;
+
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -23,6 +25,7 @@ import java.nio.charset.Charset;
import java.nio.charset.UnsupportedCharsetException;
import java.util.ArrayList;
import java.util.List;
+import java.util.regex.Pattern;
/**
* Creates an URL-encoded URI from a path string and key-value parameter pairs.
@@ -37,6 +40,7 @@ import java.util.List;
*/
public class QueryStringEncoder {
+ private static final Pattern PATTERN = Pattern.compile("+", Pattern.LITERAL);
private final Charset charset;
private final String uri;
private final List params = new ArrayList();
@@ -54,31 +58,22 @@ public class QueryStringEncoder {
* path string in the specified charset.
*/
public QueryStringEncoder(String uri, Charset charset) {
- if (uri == null) {
- throw new NullPointerException("getUri");
- }
- if (charset == null) {
- throw new NullPointerException("charset");
- }
-
- this.uri = uri;
- this.charset = charset;
+ this.uri = ObjectUtil.checkNotNull(uri, "uri");
+ this.charset = ObjectUtil.checkNotNull(charset, "charset");
}
/**
* Adds a parameter with the specified name and value to this encoder.
*/
public void addParam(String name, String value) {
- if (name == null) {
- throw new NullPointerException("name");
- }
+ ObjectUtil.checkNotNull(name, "name");
params.add(new Param(name, value));
}
/**
* Returns the URL-encoded URI object which was created from the path string
* specified in the constructor and the parameters added by
- * {@link #addParam(String, String)} getMethod.
+ * {@link #addParam(String, String)} method.
*/
public URI toUri() throws URISyntaxException {
return new URI(toString());
@@ -87,7 +82,7 @@ public class QueryStringEncoder {
/**
* Returns the URL-encoded URI which was created from the path string
* specified in the constructor and the parameters added by
- * {@link #addParam(String, String)} getMethod.
+ * {@link #addParam(String, String)} method.
*/
@Override
public String toString() {
@@ -113,7 +108,7 @@ public class QueryStringEncoder {
private static String encodeComponent(String s, Charset charset) {
// TODO: Optimize me.
try {
- return URLEncoder.encode(s, charset.name()).replace("+", "%20");
+ return URLEncoder.encode(s, PATTERN.matcher(charset.name()).replaceAll("%20"));
} catch (UnsupportedEncodingException ignored) {
throw new UnsupportedCharsetException(charset.name());
}