Skip to content

Commit 3decaf8

Browse files
author
黄悦麒
authored
Merge pull request #5 from Hyq0719/feature/hyq/2022/01/init
Feature/hyq/2022/01/init
2 parents eab885f + 03f7f91 commit 3decaf8

File tree

11 files changed

+259
-80
lines changed

11 files changed

+259
-80
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ Marketing API Java SDKs 旨在对国内主流的Marketing API进行封装,帮
88

99
```xml
1010
<dependency>
11-
<groupId>com.github.hyq0719</groupId>
11+
<groupId>io.github.hyq0719</groupId>
1212
<artifactId>(不同模块参考下文)</artifactId>
1313
<version>1.0.0-SNAPSHOT</version>
1414
</dependency>

marketing-api-common/src/main/java/com/hyq0719/mktapi/common/ApiClient.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ public String getToken(String accountId) {
8888
* @param tokenKey
8989
*/
9090
public String refreshSingleToken(String tokenKey) {
91+
//tokenKey判空
92+
if (StringUtils.isEmpty(tokenKey)) {
93+
return "";
94+
}
9195
IToken iToken = externalTokenService.refreshToken(tokenKey);
9296
iTokenLocalCache.put(tokenKey, iToken);
9397
return iToken.getToken();

marketing-api-common/src/main/java/com/hyq0719/mktapi/common/ApiRequest.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,16 +76,13 @@ public RequestParam constructParameters(T t, String token) {
7676
List<Pair> localVarCollectionQueryParams = new ArrayList<>();
7777
setRequestParam(localVarQueryParams, localVarCollectionQueryParams, t);
7878

79-
Map<String, Object> localVarMultipartTextMap = new HashMap<>();
80-
Map<String, File> localVarMultipartFileMap = new HashMap<>();
81-
setMultipartParam(localVarMultipartTextMap, localVarMultipartFileMap, t);
82-
8379
Map<String, String> localVarHeaderParams = new HashMap<>();
8480
final String localVarAccept = selectHeaderAccept(getRequestAccept());
8581
if (localVarAccept != null) {
8682
localVarHeaderParams.put("Accept", localVarAccept);
8783
}
8884
Map<String, Object> localVarFormParams = new HashMap<>();
85+
setFormParam(localVarFormParams, t);
8986
final String localVarContentType = selectHeaderContentType(getRequestContentTypes());
9087
localVarHeaderParams.put("Content-Type", localVarContentType);
9188

@@ -103,8 +100,6 @@ public RequestParam constructParameters(T t, String token) {
103100
.collectionQueryParams(localVarCollectionQueryParams)
104101
.headerParams(localVarHeaderParams)
105102
.formParams(localVarFormParams)
106-
.multipartTextMap(localVarMultipartTextMap)
107-
.multipartFileMap(localVarMultipartFileMap)
108103
.authNames(getLocalVarAuthNames())
109104
.accessToken(localVarToken)
110105
.build();
@@ -123,7 +118,7 @@ public String[] getRequestAccept() {
123118
public void setRequestParam(List<Pair> localVarQueryParams, List<Pair> localVarCollectionQueryParams, T t) {
124119
}
125120

126-
public void setMultipartParam(Map<String, Object> multipartTextMap, Map<String, File> multipartFileMap, T t) {
121+
public void setFormParam(Map<String, Object> formParamMap, T t) {
127122
}
128123

129124
public void paramValidate(T t) throws ApiException {

marketing-api-common/src/main/java/com/hyq0719/mktapi/common/executor/http/ApacheHttpHandler.java

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@
66
import com.hyq0719.mktapi.common.exception.ApiException;
77
import com.hyq0719.mktapi.common.executor.parameter.RequestParam;
88
import lombok.extern.slf4j.Slf4j;
9-
import org.apache.http.Consts;
10-
import org.apache.http.Header;
11-
import org.apache.http.HttpResponse;
12-
import org.apache.http.HttpVersion;
9+
import org.apache.http.*;
1310
import org.apache.http.client.config.RequestConfig;
1411
import org.apache.http.client.methods.HttpGet;
1512
import org.apache.http.client.methods.HttpPost;
@@ -84,21 +81,7 @@ public void setPostEntity(HttpPost httpPost, RequestParam param) {
8481
contentType = "application/json";
8582
}
8683
if ("multipart/form-data".equals(contentType)) {
87-
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
88-
Map<String, File> fileMap = param.getMultipartFileMap();
89-
if (fileMap != null) {
90-
for (Entry<String, File> entry : fileMap.entrySet()) {
91-
builder.addPart(entry.getKey(), new FileBody(entry.getValue()));
92-
}
93-
}
94-
Map<String, Object> textMap = param.getMultipartTextMap();
95-
if (textMap != null) {
96-
for (Entry<String, Object> entry : textMap.entrySet()) {
97-
builder.addTextBody(entry.getKey(), String.valueOf(entry.getValue()),
98-
ContentType.TEXT_PLAIN.withCharset(Consts.UTF_8));
99-
}
100-
}
101-
httpPost.setEntity(builder.build());
84+
httpPost.setEntity(buildRequestEntityMultipart(param.getFormParams()));
10285
} else {
10386
String postEntity = parameterToString(param.getPostBody());
10487
if (postEntity != null) {
@@ -109,6 +92,22 @@ public void setPostEntity(HttpPost httpPost, RequestParam param) {
10992
}
11093
}
11194

95+
public HttpEntity buildRequestEntityMultipart(Map<String, Object> formParams) {
96+
MultipartEntityBuilder mpBuilder = MultipartEntityBuilder.create();
97+
if (formParams != null) {
98+
for (Entry<String, Object> entry : formParams.entrySet()) {
99+
if (entry.getValue() instanceof File) {
100+
File file = (File) entry.getValue();
101+
mpBuilder.addPart(entry.getKey(), new FileBody(file));
102+
} else {
103+
mpBuilder.addTextBody(entry.getKey(), String.valueOf(entry.getValue()),
104+
ContentType.TEXT_PLAIN.withCharset(Consts.UTF_8));
105+
}
106+
}
107+
}
108+
return mpBuilder.build();
109+
}
110+
112111
public <T> T handleResponse(HttpResponse response, Type returnType) throws ApiException {
113112
int code = response.getStatusLine().getStatusCode();
114113
if (code >= 200 && code < 300) {

marketing-api-common/src/main/java/com/hyq0719/mktapi/common/executor/http/HttpHandler.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,36 @@
77

88
import java.lang.reflect.Type;
99

10+
/**
11+
* 网络请求处理器
12+
*
13+
* @author hyq0719
14+
*/
1015
public interface HttpHandler {
1116

17+
/**
18+
* 执行网络请求
19+
*
20+
* @param param 请求参数
21+
* @param returnType 请求返回Type
22+
* @param <T> 请求返回类型
23+
* @return ApiResponse
24+
* @throws ApiException
25+
*/
1226
<T> ApiResponse<T> execute(RequestParam param, Type returnType) throws ApiException;
1327

28+
/**
29+
* 构造请求url
30+
*
31+
* @param param 请求参数
32+
* @return 请求url
33+
*/
1434
String buildUrl(RequestParam param);
1535

36+
/**
37+
* 获取JSON序列化工具
38+
*
39+
* @return JSON序列化工具
40+
*/
1641
JSON getJSON();
1742
}

marketing-api-common/src/main/java/com/hyq0719/mktapi/common/executor/http/OkhttpHttpHandler.java

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
public class OkhttpHttpHandler extends BaseHttpHandler {
2424

2525
private final OkHttpClient httpsClient;
26-
private Map<String, String> defaultHeaderMap = new HashMap<>();
27-
private String tempFolderPath = null;
26+
private final Map<String, String> defaultHeaderMap = new HashMap<>();
27+
private final String tempFolderPath = null;
2828

2929
public OkhttpHttpHandler(OkHttpClient httpsClient) {
3030
this.httpsClient = httpsClient;
@@ -52,8 +52,6 @@ public Call buildCall(RequestParam param)
5252
public Request buildRequest(RequestParam param) throws ApiException {
5353
final String url = buildUrl(param);
5454
final String method = param.getMethod();
55-
final Request.Builder reqBuilder = new Request.Builder().url(url);
56-
processHeaderParams(param.getHeaderParams(), reqBuilder);
5755

5856
String contentType = param.getHeaderParams().get("Content-Type");
5957
// ensuring a default content type
@@ -66,10 +64,9 @@ public Request buildRequest(RequestParam param) throws ApiException {
6664
if (!HttpMethod.permitsRequestBody(param.getMethod())) {
6765
reqBody = null;
6866
} else if ("application/x-www-form-urlencoded".equals(contentType)) {
69-
reqBody = serialize(param.getPostBody(), contentType);
67+
reqBody = buildRequestBodyFormEncoding(param.getFormParams());
7068
} else if ("multipart/form-data".equals(contentType)) {
71-
MultipartBody multipartBody = multiSerialize(param.getMultipartTextMap(), param.getMultipartFileMap());
72-
return reqBuilder.method("POST", multipartBody).build();
69+
reqBody = buildRequestBodyMultipart(param.getFormParams());
7370
} else if (body == null) {
7471
if ("DELETE".equals(method)) {
7572
// allow calling DELETE without sending a request body
@@ -81,20 +78,44 @@ public Request buildRequest(RequestParam param) throws ApiException {
8178
} else {
8279
reqBody = serialize(body, contentType);
8380
}
84-
81+
Request.Builder reqBuilder = new Request.Builder().url(url);
82+
processHeaderParams(param.getHeaderParams(), reqBuilder);
8583
return reqBuilder.method(method, reqBody).build();
8684
}
8785

88-
public MultipartBody multiSerialize(Map<String, Object> textMap, Map<String, File> fileMap) {
89-
Builder builder = new Builder().setType(MultipartBody.FORM);
90-
for (Entry<String, Object> entry : textMap.entrySet()) {
91-
builder.addFormDataPart(entry.getKey(), String.valueOf(entry.getValue()));
86+
/**
87+
* Build a form-encoding request body with the given form parameters.
88+
*
89+
* @param formParams Form parameters in the form of Map
90+
* @return RequestBody
91+
*/
92+
public RequestBody buildRequestBodyFormEncoding(Map<String, Object> formParams) {
93+
FormBody.Builder formBuilder = new FormBody.Builder();
94+
for (Entry<String, Object> param : formParams.entrySet()) {
95+
formBuilder.add(param.getKey(), parameterToString(param.getValue()));
9296
}
93-
for (Entry<String, File> entry : fileMap.entrySet()) {
94-
builder.addFormDataPart(entry.getKey(), entry.getValue().getName(),
95-
RequestBody.create(MediaType.parse("multipart/form-data"), entry.getValue()));
97+
return formBuilder.build();
98+
}
99+
100+
/**
101+
* Build a multipart (file uploading) request body with the given form parameters, which could
102+
* contain text fields and file fields.
103+
*
104+
* @param formParams Form parameters in the form of Map
105+
* @return RequestBody
106+
*/
107+
public MultipartBody buildRequestBodyMultipart(Map<String, Object> formParams) {
108+
Builder mpBuilder = new Builder().setType(MultipartBody.FORM);
109+
for (Entry<String, Object> param : formParams.entrySet()) {
110+
if (param.getValue() instanceof File) {
111+
File file = (File) param.getValue();
112+
mpBuilder.addFormDataPart(param.getKey(), file.getName()
113+
, RequestBody.create(MediaType.parse("multipart/form-data"), file));
114+
} else {
115+
mpBuilder.addFormDataPart(param.getKey(), String.valueOf(param.getValue()));
116+
}
96117
}
97-
return builder.build();
118+
return mpBuilder.build();
98119
}
99120

100121
public RequestBody serialize(Object obj, String contentType) throws ApiException {

marketing-api-common/src/main/java/com/hyq0719/mktapi/common/executor/parameter/RequestParam.java

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,70 @@
66
import lombok.Builder;
77
import lombok.Data;
88

9-
import java.io.File;
109
import java.util.List;
1110
import java.util.Map;
1211

12+
/**
13+
* api请求参数
14+
*
15+
* @author hyq0719
16+
*/
1317
@Data
1418
@Builder
1519
@AllArgsConstructor
1620
public class RequestParam {
21+
/**
22+
* 每个api的唯一路径
23+
*/
1724
private String path;
25+
/**
26+
* 协议:http,https
27+
*/
1828
private String scheme;
29+
/**
30+
* host地址
31+
*/
1932
private String host;
33+
/**
34+
* api版本
35+
*/
2036
private String version;
21-
private BaseUrl baseUrl;
37+
/**
38+
* 请求方法:GET,POST等
39+
*/
2240
private String method;
41+
/**
42+
* url中的请求参数
43+
*/
2344
private List<Pair> queryParams;
45+
/**
46+
* url中的请求集合参数
47+
*/
2448
private List<Pair> collectionQueryParams;
49+
/**
50+
* 是否使用请求体
51+
*/
2552
private Boolean usePostBody;
53+
/**
54+
* 请求体
55+
*/
2656
private Object postBody;
57+
/**
58+
* 请求头
59+
*/
2760
private Map<String, String> headerParams;
61+
/**
62+
* 请求表参数
63+
*/
2864
private Map<String, Object> formParams;
65+
/**
66+
* 请求授权参数名
67+
*/
2968
private String[] authNames;
69+
/**
70+
* access token
71+
*/
3072
private String accessToken;
31-
private Map<String, Object> multipartTextMap;
32-
private Map<String, File> multipartFileMap;
3373

3474
public RequestParam() {
3575
method = RequestConstants.GET;

marketing-api-oceanengine/src/main/java/com/hyq0719/mktapi/oceanengine/api/DmpAudienceApi.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -132,19 +132,18 @@ public DmpCustomAudienceDelete dmpCustomAudienceDelete() {
132132
public class DmpDataSourceFileUpload extends OceanApiRequest<DmpDataSourceFileUploadRequest,
133133
OceanResponse<DmpDataSourceFileUploadResponseData>> {
134134
@Override
135-
public void setMultipartParam(Map<String, Object> textMap, Map<String, File> fileMap,
136-
DmpDataSourceFileUploadRequest request) {
135+
public void setFormParam(Map<String, Object> formParamMap, DmpDataSourceFileUploadRequest request) {
137136
Long advertiserId = request.getAdvertiserId();
138137
if (advertiserId != null) {
139-
textMap.put(ADVERTISER_ID, advertiserId);
138+
formParamMap.put(ADVERTISER_ID, advertiserId);
140139
}
141140
String fileSignature = request.getFileSignature();
142141
if (fileSignature != null) {
143-
textMap.put("image_signature", fileSignature);
142+
formParamMap.put("image_signature", fileSignature);
144143
}
145144
File file = request.getFile();
146145
if (file != null) {
147-
fileMap.put("image_file", file);
146+
formParamMap.put("image_file", file);
148147
}
149148
}
150149
}

0 commit comments

Comments
 (0)