Skip to content

Commit 4312d5e

Browse files
author
YangSen-qn
committed
optimize api
1 parent 5bfcde4 commit 4312d5e

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

src/main/java/com/qiniu/storage/Api.java

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,10 @@ public static class Request implements Cloneable {
398398
* @param urlPrefix 请求的 urlPrefix, scheme + host
399399
*/
400400
protected Request(String urlPrefix) {
401+
if (StringUtils.isNullOrEmpty(urlPrefix)) {
402+
return;
403+
}
404+
401405
try {
402406
URL url = new URL(urlPrefix);
403407
this.scheme = url.getProtocol();
@@ -628,6 +632,15 @@ public StringMap getHeader() throws QiniuException {
628632
return header;
629633
}
630634

635+
/**
636+
* 构造 header 信息,如果需要设置请求体,子类需要重写
637+
*
638+
* @throws QiniuException 组装 header 时的异常,一般为缺失必要参数的异常
639+
*/
640+
protected void buildHeader() throws QiniuException {
641+
642+
}
643+
631644
/**
632645
* 获取 URL
633646
*
@@ -798,6 +811,7 @@ boolean canRetry() {
798811
protected void prepareToRequest() throws QiniuException {
799812
buildPath();
800813
buildQuery();
814+
buildHeader();
801815
buildBodyInfo();
802816
}
803817

@@ -1046,14 +1060,18 @@ protected RequestBody get() {
10461060
}
10471061

10481062
final MultipartBody.Builder b = new MultipartBody.Builder();
1049-
b.addFormDataPart(name, fileName, body);
1050-
1051-
fields.forEach(new StringMap.Consumer() {
1052-
@Override
1053-
public void accept(String key, Object value) {
1054-
b.addFormDataPart(key, value.toString());
1055-
}
1056-
});
1063+
if (StringUtils.isNullOrEmpty(name)) {
1064+
b.addFormDataPart(name, fileName, body);
1065+
}
1066+
1067+
if (fields != null) {
1068+
fields.forEach(new StringMap.Consumer() {
1069+
@Override
1070+
public void accept(String key, Object value) {
1071+
b.addFormDataPart(key, value.toString());
1072+
}
1073+
});
1074+
}
10571075

10581076
b.setType(MediaType.parse("multipart/form-data"));
10591077

src/main/java/com/qiniu/storage/ApiInterceptorRetryHosts.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,14 @@ Api.Response intercept(Api.Request request, Api.Handler handler) throws QiniuExc
3737
}
3838

3939
String reqHost = request.getHost();
40-
String firstHost = hostProvider.provider();
41-
if (!hostProvider.isHostValid(reqHost) && !StringUtils.isNullOrEmpty(firstHost)) {
42-
request.setHost(firstHost);
40+
if (!hostProvider.isHostValid(reqHost)) {
41+
// 支持不配置默认的 host,未配置则从 provider 中获取
42+
String firstHost = hostProvider.provider();
43+
if (!StringUtils.isNullOrEmpty(firstHost)) {
44+
request.setHost(firstHost);
45+
} else {
46+
throw QiniuException.unrecoverable("no host provide");
47+
}
4348
}
4449

4550
if (retryMax == 0) {

0 commit comments

Comments
 (0)