Skip to content

Commit a1cf358

Browse files
committed
http: support same name queries and forms
1 parent b61f400 commit a1cf358

File tree

4 files changed

+61
-152
lines changed

4 files changed

+61
-152
lines changed

http/src/main/java/com/mcxiaoke/next/http/KeyValue.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,8 @@ public KeyValue(final String key, final String value) {
1818
super(key, value);
1919
}
2020

21+
@Override
22+
public String toString() {
23+
return "{" + String.valueOf(first) + ":" + String.valueOf(second) + "}";
24+
}
2125
}

http/src/main/java/com/mcxiaoke/next/http/NextClient.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import okhttp3.Headers;
88
import okhttp3.OkHttpClient;
99
import okhttp3.Request;
10-
import okhttp3.RequestBody;
1110
import okhttp3.Response;
1211

1312
import java.io.IOException;
@@ -436,9 +435,9 @@ private void logHttpCurl(final NextRequest request) {
436435
// builder.append(" ").append(entry.getKey()).append("==").append(entry.getValue());
437436
// }
438437

439-
for (Map.Entry<String, String> entry : request.form().entrySet()) {
440-
builder.append(" ").append(entry.getKey()).append("=\"")
441-
.append(entry.getValue()).append("\"");
438+
for (KeyValue entry : request.forms()) {
439+
builder.append(" ").append(entry.first).append("=\"")
440+
.append(entry.second).append("\"");
442441
}
443442

444443
for (BodyPart part : request.parts()) {

http/src/main/java/com/mcxiaoke/next/http/NextParams.java

Lines changed: 29 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55

66
import java.io.File;
77
import java.util.ArrayList;
8-
import java.util.HashMap;
98
import java.util.List;
109
import java.util.Map;
10+
import java.util.Map.Entry;
1111
import java.util.concurrent.ConcurrentHashMap;
1212

1313
/**
@@ -17,14 +17,14 @@
1717
*/
1818
public class NextParams {
1919
final Map<String, String> headers;
20-
final Map<String, String> queries;
21-
final Map<String, String> forms;
20+
final List<KeyValue> queries;
21+
final List<KeyValue> forms;
2222
final List<BodyPart> parts;
2323

2424
public NextParams() {
2525
headers = new ConcurrentHashMap<>();
26-
queries = new ConcurrentHashMap<>();
27-
forms = new ConcurrentHashMap<>();
26+
queries = new ArrayList<>();
27+
forms = new ArrayList<>();
2828
parts = new ArrayList<>();
2929
}
3030

@@ -36,59 +36,6 @@ public NextParams() {
3636
parts = source.parts;
3737
}
3838

39-
String getQuery(final String key) {
40-
return this.queries.get(key);
41-
}
42-
43-
String getForm(final String key) {
44-
return this.forms.get(key);
45-
}
46-
47-
String getHeader(final String key) {
48-
return this.headers.get(key);
49-
}
50-
51-
BodyPart getPart(final String key) {
52-
for (final BodyPart part : parts) {
53-
if (part.getName().equals(key)) {
54-
return part;
55-
}
56-
}
57-
return null;
58-
}
59-
60-
boolean hasQuery(final String key) {
61-
return this.queries.containsKey(key);
62-
}
63-
64-
boolean hasForm(final String key) {
65-
return this.forms.containsKey(key);
66-
}
67-
68-
boolean hasHeader(final String key) {
69-
return this.headers.containsKey(key);
70-
}
71-
72-
boolean hasPart(final String key) {
73-
return getPart(key) != null;
74-
}
75-
76-
int queriesSize() {
77-
return queries.size();
78-
}
79-
80-
int formsSize() {
81-
return forms.size();
82-
}
83-
84-
int headersSize() {
85-
return headers.size();
86-
}
87-
88-
int partsSize() {
89-
return parts.size();
90-
}
91-
9239
public NextParams header(String key, String value) {
9340
AssertUtils.notEmpty(key, "key must not be null or empty.");
9441
if (value != null) {
@@ -109,14 +56,23 @@ public NextParams headers(Map<String, String> headers) {
10956
public NextParams query(String key, String value) {
11057
AssertUtils.notEmpty(key, "key must not be null or empty.");
11158
if (value != null) {
112-
this.queries.put(key, value);
59+
this.queries.add(KeyValue.of(key, value));
60+
}
61+
return this;
62+
}
63+
64+
public NextParams queries(List<KeyValue> queries) {
65+
if (queries != null) {
66+
for (final KeyValue entry : queries) {
67+
query(entry.first, entry.second);
68+
}
11369
}
11470
return this;
11571
}
11672

11773
public NextParams queries(Map<String, String> queries) {
11874
if (queries != null) {
119-
for (final Map.Entry<String, String> entry : queries.entrySet()) {
75+
for (final Entry<String, String> entry : queries.entrySet()) {
12076
query(entry.getKey(), entry.getValue());
12177
}
12278
}
@@ -126,14 +82,23 @@ public NextParams queries(Map<String, String> queries) {
12682
public NextParams form(String key, String value) {
12783
AssertUtils.notEmpty(key, "key must not be null or empty.");
12884
if (value != null) {
129-
this.forms.put(key, value);
85+
this.forms.add(KeyValue.of(key, value));
86+
}
87+
return this;
88+
}
89+
90+
public NextParams forms(List<KeyValue> forms) {
91+
if (forms != null) {
92+
for (final KeyValue entry : forms) {
93+
form(entry.first, entry.second);
94+
}
13095
}
13196
return this;
13297
}
13398

13499
public NextParams forms(Map<String, String> forms) {
135100
if (forms != null) {
136-
for (final Map.Entry<String, String> entry : forms.entrySet()) {
101+
for (final Entry<String, String> entry : forms.entrySet()) {
137102
form(entry.getKey(), entry.getValue());
138103
}
139104
}
@@ -177,7 +142,7 @@ public NextParams part(final BodyPart part) {
177142
return this;
178143
}
179144

180-
public Map<String, String> forms() {
145+
public List<KeyValue> forms() {
181146
return forms;
182147
}
183148

@@ -189,7 +154,7 @@ public List<BodyPart> parts() {
189154
return parts;
190155
}
191156

192-
public Map<String, String> queries() {
157+
public List<KeyValue> queries() {
193158
return queries;
194159
}
195160

http/src/main/java/com/mcxiaoke/next/http/NextRequest.java

Lines changed: 25 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import com.mcxiaoke.next.utils.AssertUtils;
1919
import com.mcxiaoke.next.utils.IOUtils;
20-
import com.mcxiaoke.next.utils.StringUtils;
2120
import okhttp3.FormBody;
2221
import okhttp3.HttpUrl;
2322
import okhttp3.MultipartBody;
@@ -29,11 +28,10 @@
2928
import java.io.InputStream;
3029
import java.io.Reader;
3130
import java.nio.charset.Charset;
31+
import java.util.ArrayList;
3232
import java.util.Collection;
3333
import java.util.List;
3434
import java.util.Map;
35-
import java.util.Map.Entry;
36-
import java.util.Set;
3735

3836
public class NextRequest {
3937
protected final HttpMethod method;
@@ -126,6 +124,11 @@ public NextRequest query(String key, String value) {
126124
return this;
127125
}
128126

127+
public NextRequest queries(List<KeyValue> queries) {
128+
this.params.queries(queries);
129+
return this;
130+
}
131+
129132
public NextRequest queries(Map<String, String> queries) {
130133
this.params.queries(queries);
131134
return this;
@@ -145,6 +148,14 @@ public NextRequest form(String key, String value) {
145148
return this;
146149
}
147150

151+
public NextRequest forms(List<KeyValue> forms) {
152+
// throwIfNotSupportBody();
153+
if (supportBody()) {
154+
this.params.forms(forms);
155+
}
156+
return this;
157+
}
158+
148159
public NextRequest forms(Map<String, String> forms) {
149160
// throwIfNotSupportBody();
150161
if (supportBody()) {
@@ -287,84 +298,15 @@ protected NextRequest part(final BodyPart part) {
287298
return this;
288299
}
289300

290-
protected NextRequest removeHeader(String key) {
291-
this.params.headers.remove(key);
292-
return this;
293-
}
294-
295-
protected NextRequest removeQuery(String key) {
296-
this.params.queries.remove(key);
297-
return this;
298-
}
299-
300-
protected NextRequest removeForm(String key) {
301-
this.params.forms.remove(key);
302-
return this;
303-
}
304-
305-
protected NextRequest removePart(BodyPart part) {
306-
this.params.parts.remove(part);
307-
return this;
308-
}
309-
310-
protected String getHeader(String key) {
311-
return this.params.getHeader(key);
312-
}
313-
314-
protected String getQuery(String key) {
315-
return this.params.getQuery(key);
316-
}
317-
318-
protected String getForm(String key) {
319-
return this.params.getForm(key);
320-
}
321-
322-
protected BodyPart getPart(String key) {
323-
return this.params.getPart(key);
324-
}
325-
326-
protected boolean hasHeader(String key) {
327-
return getHeader(key) != null;
328-
}
329-
330-
protected boolean hasQuery(String key) {
331-
return getQuery(key) != null;
332-
}
333-
334-
protected boolean hasForm(String key) {
335-
return getForm(key) != null;
336-
}
337-
338-
protected boolean hasPart(String key) {
339-
return getPart(key) != null;
340-
}
341-
342-
343-
protected int queriesSize() {
344-
return queries().size();
345-
}
346-
347-
protected int formsSize() {
348-
return form().size();
349-
}
350-
351-
protected int headersSize() {
352-
return headers().size();
353-
}
354-
355-
protected int partsSize() {
356-
return parts().size();
357-
}
358-
359301
protected Map<String, String> headers() {
360302
return this.params.headers;
361303
}
362304

363-
protected Map<String, String> queries() {
305+
protected List<KeyValue> queries() {
364306
return this.params.queries;
365307
}
366308

367-
protected Map<String, String> form() {
309+
protected List<KeyValue> forms() {
368310
return this.params.forms;
369311
}
370312

@@ -380,12 +322,11 @@ protected boolean hasForms() {
380322
return this.params.forms.size() > 0;
381323
}
382324

383-
384325
HttpUrl buildUrlWithQueries() {
385326
final HttpUrl.Builder builder = httpUrl.newBuilder();
386-
final Set<Entry<String, String>> entrySet = params.queries().entrySet();
387-
for (final Entry<String, String> entry : entrySet) {
388-
builder.addQueryParameter(entry.getKey(), entry.getValue());
327+
final List<KeyValue> entrySet = new ArrayList<>(params.queries());
328+
for (final KeyValue entry : entrySet) {
329+
builder.addQueryParameter(entry.first, entry.second);
389330
}
390331
return builder.build();
391332
}
@@ -411,17 +352,17 @@ protected RequestBody getRequestBody() throws IOException {
411352
multipart.addFormDataPart(part.getName(), part.getFileName(), part.getBody());
412353
}
413354
}
414-
for (Map.Entry<String, String> entry : form().entrySet()) {
415-
final String key = entry.getKey();
416-
final String value = entry.getValue();
355+
for (KeyValue entry : forms()) {
356+
final String key = entry.first;
357+
final String value = entry.second;
417358
multipart.addFormDataPart(key, value == null ? "" : value);
418359
}
419360
requestBody = multipart.setType(MultipartBody.FORM).build();
420361
} else if (hasForms()) {
421362
final FormBody.Builder bodyBuilder = new FormBody.Builder();
422-
for (Map.Entry<String, String> entry : form().entrySet()) {
423-
final String key = entry.getKey();
424-
final String value = entry.getValue();
363+
for (KeyValue entry : forms()) {
364+
final String key = entry.first;
365+
final String value = entry.second;
425366
bodyBuilder.add(key, value == null ? "" : value);
426367
}
427368
requestBody = bodyBuilder.build();

0 commit comments

Comments
 (0)