怎建远程调用文件上传
This commit is contained in:
parent
aa85cae903
commit
4354516b20
@ -6,6 +6,8 @@ import ink.wgink.annotation.rpc.rest.method.RemoteGetMethod;
|
|||||||
import ink.wgink.annotation.rpc.rest.method.RemotePostMethod;
|
import ink.wgink.annotation.rpc.rest.method.RemotePostMethod;
|
||||||
import ink.wgink.annotation.rpc.rest.method.RemotePutMethod;
|
import ink.wgink.annotation.rpc.rest.method.RemotePutMethod;
|
||||||
import ink.wgink.annotation.rpc.rest.params.*;
|
import ink.wgink.annotation.rpc.rest.params.*;
|
||||||
|
import ink.wgink.common.rpc.rest.pojo.RemoteFileInputStream;
|
||||||
|
import ink.wgink.common.rpc.rest.pojo.RemoteRequest;
|
||||||
import ink.wgink.common.rpc.rest.request.RestRemoteRequest;
|
import ink.wgink.common.rpc.rest.request.RestRemoteRequest;
|
||||||
import ink.wgink.exceptions.ParamsException;
|
import ink.wgink.exceptions.ParamsException;
|
||||||
import ink.wgink.exceptions.base.SystemException;
|
import ink.wgink.exceptions.base.SystemException;
|
||||||
@ -15,6 +17,7 @@ import org.springframework.util.LinkedMultiValueMap;
|
|||||||
import org.springframework.util.MultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.lang.reflect.InvocationHandler;
|
import java.lang.reflect.InvocationHandler;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@ -63,6 +66,8 @@ public class RestRemoteHandler implements InvocationHandler {
|
|||||||
MultiValueMap<String, Object> formVariableParams = null;
|
MultiValueMap<String, Object> formVariableParams = null;
|
||||||
String uri;
|
String uri;
|
||||||
Object requestBody = null;
|
Object requestBody = null;
|
||||||
|
Map<String, RemoteFileInputStream> fileInputStreamVariableParams = null;
|
||||||
|
Map<String, File> fileVariableParams = null;
|
||||||
RequestMethod requestMethod;
|
RequestMethod requestMethod;
|
||||||
if (method.isAnnotationPresent(RemoteGetMethod.class)) {
|
if (method.isAnnotationPresent(RemoteGetMethod.class)) {
|
||||||
// GET请求
|
// GET请求
|
||||||
@ -79,8 +84,18 @@ public class RestRemoteHandler implements InvocationHandler {
|
|||||||
requestMethod = RequestMethod.POST;
|
requestMethod = RequestMethod.POST;
|
||||||
RemotePostMethod postMethod = method.getAnnotation(RemotePostMethod.class);
|
RemotePostMethod postMethod = method.getAnnotation(RemotePostMethod.class);
|
||||||
uri = postMethod.value();
|
uri = postMethod.value();
|
||||||
|
// 1. 先判断是否有文件
|
||||||
|
fileVariableParams = getFileParams(method.getParameters(), args);
|
||||||
|
if (fileVariableParams.isEmpty()) {
|
||||||
|
// 2. 判断是否是文件流
|
||||||
|
fileInputStreamVariableParams = getFileInputStreamParams(method.getParameters(), args);
|
||||||
|
}
|
||||||
|
// 3. 判断表单
|
||||||
formVariableParams = getFormVariableParams(method.getParameters(), args);
|
formVariableParams = getFormVariableParams(method.getParameters(), args);
|
||||||
if (formVariableParams.isEmpty()) {
|
if ((fileInputStreamVariableParams == null || fileInputStreamVariableParams.isEmpty()) &&
|
||||||
|
fileVariableParams.isEmpty() &&
|
||||||
|
formVariableParams.isEmpty()) {
|
||||||
|
// 4. 文件与表单都不存在、判断json
|
||||||
requestBody = getRequestBody(method.getParameters(), args);
|
requestBody = getRequestBody(method.getParameters(), args);
|
||||||
}
|
}
|
||||||
} else if (method.isAnnotationPresent(RemotePutMethod.class)) {
|
} else if (method.isAnnotationPresent(RemotePutMethod.class)) {
|
||||||
@ -97,8 +112,18 @@ public class RestRemoteHandler implements InvocationHandler {
|
|||||||
checkPathVariableParams(pathVariable, pathVariableParams);
|
checkPathVariableParams(pathVariable, pathVariableParams);
|
||||||
uri = buildUri(baseUri, uri, pathVariable, pathVariableParams);
|
uri = buildUri(baseUri, uri, pathVariable, pathVariableParams);
|
||||||
String remoteFullPath = buildFullUri(remotePath, uri, queryVariableParams, queryMapParams);
|
String remoteFullPath = buildFullUri(remotePath, uri, queryVariableParams, queryMapParams);
|
||||||
RestRemoteRequest restRemoteRequest = new RestRemoteRequest();
|
|
||||||
return restRemoteRequest.request(requestMethod, remoteFullPath, headerVariableParams, formVariableParams, requestBody, method.getGenericReturnType());
|
// 发起请求
|
||||||
|
RemoteRequest remoteRequest = new RemoteRequest();
|
||||||
|
remoteRequest.setRequestMethod(requestMethod);
|
||||||
|
remoteRequest.setRemoteUri(remoteFullPath);
|
||||||
|
remoteRequest.setHeaders(headerVariableParams);
|
||||||
|
remoteRequest.setFormVariableParams(formVariableParams);
|
||||||
|
remoteRequest.setFileVariableParams(fileVariableParams);
|
||||||
|
remoteRequest.setFileInputStreamVariableParams(fileInputStreamVariableParams);
|
||||||
|
remoteRequest.setJsonBody(requestBody);
|
||||||
|
remoteRequest.setResultType(method.getGenericReturnType());
|
||||||
|
return new RestRemoteRequest().request(remoteRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -172,6 +197,68 @@ public class RestRemoteHandler implements InvocationHandler {
|
|||||||
return queryVariableParamsMap;
|
return queryVariableParamsMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件
|
||||||
|
*
|
||||||
|
* @param parameters
|
||||||
|
* @param args
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private Map<String, File> getFileParams(Parameter[] parameters, Object[] args) {
|
||||||
|
Map<String, File> fileParams = new HashMap<>(0);
|
||||||
|
for (int i = 0; i < parameters.length; i++) {
|
||||||
|
Parameter parameter = parameters[i];
|
||||||
|
if (!parameter.isAnnotationPresent(RemoteFileParams.class)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
RemoteFileParams annotation = parameter.getAnnotation(RemoteFileParams.class);
|
||||||
|
String variableName = annotation.value();
|
||||||
|
if (StringUtils.isBlank(variableName)) {
|
||||||
|
throw new ParamsException("参数 " + parameter.getName() + " 名称不能为空");
|
||||||
|
}
|
||||||
|
Object arg = args[i];
|
||||||
|
if (arg == null) {
|
||||||
|
throw new ParamsException("参数 " + parameter.getName() + " 不能为空");
|
||||||
|
}
|
||||||
|
if (!(arg instanceof File)) {
|
||||||
|
throw new ParamsException("参数 " + parameter.getName() + " 类型需为 java.io.File");
|
||||||
|
}
|
||||||
|
fileParams.put(variableName, (File) arg);
|
||||||
|
}
|
||||||
|
return fileParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件流
|
||||||
|
*
|
||||||
|
* @param parameters
|
||||||
|
* @param args
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private Map<String, RemoteFileInputStream> getFileInputStreamParams(Parameter[] parameters, Object[] args) {
|
||||||
|
Map<String, RemoteFileInputStream> inputStreamParams = new HashMap<>(0);
|
||||||
|
for (int i = 0; i < parameters.length; i++) {
|
||||||
|
Parameter parameter = parameters[i];
|
||||||
|
if (!parameter.isAnnotationPresent(RemoteFileInputStreamParams.class)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
RemoteFileInputStreamParams annotation = parameter.getAnnotation(RemoteFileInputStreamParams.class);
|
||||||
|
String variableName = annotation.value();
|
||||||
|
if (StringUtils.isBlank(variableName)) {
|
||||||
|
throw new ParamsException("参数 " + parameter.getName() + " 名称不能为空");
|
||||||
|
}
|
||||||
|
Object arg = args[i];
|
||||||
|
if (arg == null) {
|
||||||
|
throw new ParamsException("参数 " + parameter.getName() + " 不能为空");
|
||||||
|
}
|
||||||
|
if (!(arg instanceof RemoteFileInputStream)) {
|
||||||
|
throw new ParamsException("参数 " + parameter.getName() + " 类型需为 ink.wgink.common.rpc.rest.pojo.RemoteFileInputStream");
|
||||||
|
}
|
||||||
|
inputStreamParams.put(variableName, (RemoteFileInputStream) arg);
|
||||||
|
}
|
||||||
|
return inputStreamParams;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 表单参数
|
* 表单参数
|
||||||
*
|
*
|
||||||
|
@ -0,0 +1,41 @@
|
|||||||
|
package ink.wgink.common.rpc.rest.pojo;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName: RemoteFileInputStream
|
||||||
|
* @Description: 远程文件流
|
||||||
|
* @Author: wanggeng
|
||||||
|
* @Date: 2022/8/4 14:44
|
||||||
|
* @Version: 1.0
|
||||||
|
*/
|
||||||
|
public class RemoteFileInputStream {
|
||||||
|
|
||||||
|
private String fileName;
|
||||||
|
private long fileSize;
|
||||||
|
private InputStream inputStream;
|
||||||
|
|
||||||
|
public String getFileName() {
|
||||||
|
return fileName == null ? "" : fileName.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFileName(String fileName) {
|
||||||
|
this.fileName = fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getFileSize() {
|
||||||
|
return fileSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFileSize(long fileSize) {
|
||||||
|
this.fileSize = fileSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public InputStream getInputStream() {
|
||||||
|
return inputStream;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInputStream(InputStream inputStream) {
|
||||||
|
this.inputStream = inputStream;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,94 @@
|
|||||||
|
package ink.wgink.common.rpc.rest.pojo;
|
||||||
|
|
||||||
|
import org.springframework.util.LinkedMultiValueMap;
|
||||||
|
import org.springframework.util.MultiValueMap;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName: RemoteRequest
|
||||||
|
* @Description: 远程请求
|
||||||
|
* @Author: wanggeng
|
||||||
|
* @Date: 2022/8/4 14:43
|
||||||
|
* @Version: 1.0
|
||||||
|
*/
|
||||||
|
public class RemoteRequest {
|
||||||
|
|
||||||
|
private RequestMethod requestMethod;
|
||||||
|
private String remoteUri;
|
||||||
|
private Map<String, String> headers;
|
||||||
|
private MultiValueMap<String, Object> formVariableParams;
|
||||||
|
private Object jsonBody;
|
||||||
|
private Map<String, File> fileVariableParams;
|
||||||
|
private Map<String, RemoteFileInputStream> fileInputStreamVariableParams;
|
||||||
|
private Type resultType;
|
||||||
|
|
||||||
|
public RequestMethod getRequestMethod() {
|
||||||
|
return requestMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRequestMethod(RequestMethod requestMethod) {
|
||||||
|
this.requestMethod = requestMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRemoteUri() {
|
||||||
|
return remoteUri == null ? "" : remoteUri.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemoteUri(String remoteUri) {
|
||||||
|
this.remoteUri = remoteUri;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, String> getHeaders() {
|
||||||
|
return headers == null ? new HashMap<>() : headers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHeaders(Map<String, String> headers) {
|
||||||
|
this.headers = headers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultiValueMap<String, Object> getFormVariableParams() {
|
||||||
|
return formVariableParams == null ? new LinkedMultiValueMap<>() : formVariableParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFormVariableParams(MultiValueMap<String, Object> formVariableParams) {
|
||||||
|
this.formVariableParams = formVariableParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object getJsonBody() {
|
||||||
|
return jsonBody;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJsonBody(Object jsonBody) {
|
||||||
|
this.jsonBody = jsonBody;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, File> getFileVariableParams() {
|
||||||
|
return fileVariableParams == null ? new HashMap<>() : fileVariableParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFileVariableParams(Map<String, File> fileVariableParams) {
|
||||||
|
this.fileVariableParams = fileVariableParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<String, RemoteFileInputStream> getFileInputStreamVariableParams() {
|
||||||
|
return fileInputStreamVariableParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFileInputStreamVariableParams(Map<String, RemoteFileInputStream> fileInputStreamVariableParams) {
|
||||||
|
this.fileInputStreamVariableParams = fileInputStreamVariableParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Type getResultType() {
|
||||||
|
return resultType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setResultType(Type resultType) {
|
||||||
|
this.resultType = resultType;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -3,19 +3,28 @@ package ink.wgink.common.rpc.rest.request;
|
|||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONArray;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import ink.wgink.common.rpc.rest.pojo.RemoteFileInputStream;
|
||||||
|
import ink.wgink.common.rpc.rest.pojo.RemoteRequest;
|
||||||
|
import ink.wgink.exceptions.FileException;
|
||||||
import ink.wgink.exceptions.ParamsException;
|
import ink.wgink.exceptions.ParamsException;
|
||||||
import ink.wgink.exceptions.rpc.RemoteRequestException;
|
import ink.wgink.exceptions.rpc.RemoteRequestException;
|
||||||
import ink.wgink.exceptions.rpc.RemoteResponseException;
|
import ink.wgink.exceptions.rpc.RemoteResponseException;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.core.io.ByteArrayResource;
|
||||||
|
import org.springframework.core.io.InputStreamResource;
|
||||||
import org.springframework.http.*;
|
import org.springframework.http.*;
|
||||||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
||||||
|
import org.springframework.util.LinkedMultiValueMap;
|
||||||
import org.springframework.util.MultiValueMap;
|
import org.springframework.util.MultiValueMap;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
import org.springframework.web.client.HttpClientErrorException;
|
import org.springframework.web.client.HttpClientErrorException;
|
||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -48,7 +57,15 @@ public class RestRemoteRequest {
|
|||||||
this.httpsTemplate = new RestTemplate(httpsClientRequestFactory);
|
this.httpsTemplate = new RestTemplate(httpsClientRequestFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object request(RequestMethod requestMethod, String remoteUri, Map<String, String> headers, MultiValueMap<String, Object> formVariableParams, Object jsonBody, Type resultType) {
|
public Object request(RemoteRequest remoteRequest) {
|
||||||
|
RequestMethod requestMethod = remoteRequest.getRequestMethod();
|
||||||
|
String remoteUri = remoteRequest.getRemoteUri();
|
||||||
|
Map<String, String> headers = remoteRequest.getHeaders();
|
||||||
|
MultiValueMap<String, Object> formVariableParams = remoteRequest.getFormVariableParams();
|
||||||
|
Map<String, File> fileVariableParams = remoteRequest.getFileVariableParams();
|
||||||
|
Map<String, RemoteFileInputStream> fileInputVariableParams = remoteRequest.getFileInputStreamVariableParams();
|
||||||
|
Object jsonBody = remoteRequest.getFormVariableParams();
|
||||||
|
Type resultType = remoteRequest.getResultType();
|
||||||
String result;
|
String result;
|
||||||
if (RequestMethod.GET.equals(requestMethod)) {
|
if (RequestMethod.GET.equals(requestMethod)) {
|
||||||
result = get(remoteUri, headers);
|
result = get(remoteUri, headers);
|
||||||
@ -56,8 +73,8 @@ public class RestRemoteRequest {
|
|||||||
result = delete(remoteUri, headers);
|
result = delete(remoteUri, headers);
|
||||||
} else if (RequestMethod.POST.equals(requestMethod)) {
|
} else if (RequestMethod.POST.equals(requestMethod)) {
|
||||||
// form表单优先
|
// form表单优先
|
||||||
if (!formVariableParams.isEmpty()) {
|
if (!fileVariableParams.isEmpty() || !fileInputVariableParams.isEmpty() || !formVariableParams.isEmpty()) {
|
||||||
result = post(remoteUri, headers, formVariableParams);
|
result = post(remoteUri, headers, fileVariableParams, fileInputVariableParams, formVariableParams);
|
||||||
} else {
|
} else {
|
||||||
result = post(remoteUri, headers, jsonBody);
|
result = post(remoteUri, headers, jsonBody);
|
||||||
}
|
}
|
||||||
@ -66,7 +83,7 @@ public class RestRemoteRequest {
|
|||||||
} else {
|
} else {
|
||||||
throw new ParamsException("请求方法不支持");
|
throw new ParamsException("请求方法不支持");
|
||||||
}
|
}
|
||||||
// 除了结合其余均按对象
|
// 除了集合其余均按对象
|
||||||
return JSONObject.parseObject(result, resultType);
|
return JSONObject.parseObject(result, resultType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,7 +96,7 @@ public class RestRemoteRequest {
|
|||||||
*/
|
*/
|
||||||
public String get(String remoteUri, Map<String, String> headers) {
|
public String get(String remoteUri, Map<String, String> headers) {
|
||||||
try {
|
try {
|
||||||
HttpEntity<String> httpEntity = getHttpEntity(headers, null, null);
|
HttpEntity<String> httpEntity = getHttpEntity(headers, null, null, null, null);
|
||||||
ResponseEntity<String> responseEntity = getRestTemplate(remoteUri).exchange(remoteUri, HttpMethod.GET, httpEntity, String.class);
|
ResponseEntity<String> responseEntity = getRestTemplate(remoteUri).exchange(remoteUri, HttpMethod.GET, httpEntity, String.class);
|
||||||
return getStringResponse(responseEntity);
|
return getStringResponse(responseEntity);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -96,7 +113,7 @@ public class RestRemoteRequest {
|
|||||||
*/
|
*/
|
||||||
public String delete(String remoteUri, Map<String, String> headers) {
|
public String delete(String remoteUri, Map<String, String> headers) {
|
||||||
try {
|
try {
|
||||||
HttpEntity<String> httpEntity = getHttpEntity(headers, null, null);
|
HttpEntity<String> httpEntity = getHttpEntity(headers, null, null, null, null);
|
||||||
ResponseEntity<String> responseEntity = getRestTemplate(remoteUri).exchange(remoteUri, HttpMethod.DELETE, httpEntity, String.class);
|
ResponseEntity<String> responseEntity = getRestTemplate(remoteUri).exchange(remoteUri, HttpMethod.DELETE, httpEntity, String.class);
|
||||||
return getStringResponse(responseEntity);
|
return getStringResponse(responseEntity);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -114,7 +131,7 @@ public class RestRemoteRequest {
|
|||||||
public String post(String remoteUri, Map<String, String> headers, Object jsonBody) {
|
public String post(String remoteUri, Map<String, String> headers, Object jsonBody) {
|
||||||
LOG.debug("Request POST Json: {}", jsonBody);
|
LOG.debug("Request POST Json: {}", jsonBody);
|
||||||
try {
|
try {
|
||||||
HttpEntity<String> httpEntity = getHttpEntity(headers, null, jsonBody);
|
HttpEntity<String> httpEntity = getHttpEntity(headers, null, null, null, jsonBody);
|
||||||
ResponseEntity<String> responseEntity = getRestTemplate(remoteUri).exchange(remoteUri, HttpMethod.POST, httpEntity, String.class);
|
ResponseEntity<String> responseEntity = getRestTemplate(remoteUri).exchange(remoteUri, HttpMethod.POST, httpEntity, String.class);
|
||||||
return getStringResponse(responseEntity);
|
return getStringResponse(responseEntity);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -129,10 +146,14 @@ public class RestRemoteRequest {
|
|||||||
* @param headers
|
* @param headers
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public String post(String remoteUri, Map<String, String> headers, MultiValueMap<String, Object> formVariableParams) {
|
public String post(String remoteUri,
|
||||||
|
Map<String, String> headers,
|
||||||
|
Map<String, File> fileMap,
|
||||||
|
Map<String, RemoteFileInputStream> fileInputStreamMap,
|
||||||
|
MultiValueMap<String, Object> formVariableParams) {
|
||||||
LOG.debug("Request POST Form: {}", formVariableParams);
|
LOG.debug("Request POST Form: {}", formVariableParams);
|
||||||
try {
|
try {
|
||||||
HttpEntity<String> httpEntity = getHttpEntity(headers, formVariableParams, null);
|
HttpEntity<String> httpEntity = getHttpEntity(headers, fileMap, fileInputStreamMap, formVariableParams, null);
|
||||||
ResponseEntity<String> responseEntity = getRestTemplate(remoteUri).exchange(remoteUri, HttpMethod.POST, httpEntity, String.class);
|
ResponseEntity<String> responseEntity = getRestTemplate(remoteUri).exchange(remoteUri, HttpMethod.POST, httpEntity, String.class);
|
||||||
return getStringResponse(responseEntity);
|
return getStringResponse(responseEntity);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -149,7 +170,7 @@ public class RestRemoteRequest {
|
|||||||
*/
|
*/
|
||||||
public String put(String remoteUri, Map<String, String> headers, Object jsonBody) {
|
public String put(String remoteUri, Map<String, String> headers, Object jsonBody) {
|
||||||
try {
|
try {
|
||||||
HttpEntity<String> httpEntity = getHttpEntity(headers, null, jsonBody);
|
HttpEntity<String> httpEntity = getHttpEntity(headers, null, null, null, jsonBody);
|
||||||
ResponseEntity<String> responseEntity = getRestTemplate(remoteUri).exchange(remoteUri, HttpMethod.PUT, httpEntity, String.class);
|
ResponseEntity<String> responseEntity = getRestTemplate(remoteUri).exchange(remoteUri, HttpMethod.PUT, httpEntity, String.class);
|
||||||
return getStringResponse(responseEntity);
|
return getStringResponse(responseEntity);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -164,7 +185,11 @@ public class RestRemoteRequest {
|
|||||||
* @param jsonBody
|
* @param jsonBody
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private HttpEntity<String> getHttpEntity(Map<String, String> headerMap, MultiValueMap<String, Object> formVariableParams, Object jsonBody) {
|
private HttpEntity<String> getHttpEntity(Map<String, String> headerMap,
|
||||||
|
Map<String, File> fileMap,
|
||||||
|
Map<String, RemoteFileInputStream> fileInputStreamMap,
|
||||||
|
MultiValueMap<String, Object> formVariableParams,
|
||||||
|
Object jsonBody) {
|
||||||
LOG.debug("Request Header: {}", headerMap);
|
LOG.debug("Request Header: {}", headerMap);
|
||||||
HttpEntity<String> httpEntity;
|
HttpEntity<String> httpEntity;
|
||||||
if (jsonBody != null) {
|
if (jsonBody != null) {
|
||||||
@ -175,16 +200,93 @@ public class RestRemoteRequest {
|
|||||||
} else {
|
} else {
|
||||||
httpEntity = new HttpEntity(JSONObject.toJSONString(jsonBody), httpHeaders);
|
httpEntity = new HttpEntity(JSONObject.toJSONString(jsonBody), httpHeaders);
|
||||||
}
|
}
|
||||||
} else if (formVariableParams != null) {
|
} else if (!fileMap.isEmpty() || !fileInputStreamMap.isEmpty() || !formVariableParams.isEmpty()) {
|
||||||
HttpHeaders httpHeaders = getHttpHeaders(headerMap);
|
HttpHeaders httpHeaders = getHttpHeaders(headerMap);
|
||||||
|
MultiValueMap<String, Object> multiValueMap = new LinkedMultiValueMap<>();
|
||||||
|
if (!fileMap.isEmpty()) {
|
||||||
|
httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
|
||||||
|
setFileVariable(multiValueMap, fileMap);
|
||||||
|
} else if (!fileInputStreamMap.isEmpty()) {
|
||||||
|
httpHeaders.setContentType(MediaType.MULTIPART_FORM_DATA);
|
||||||
|
setFileInputStreamVariable(multiValueMap, fileInputStreamMap);
|
||||||
|
} else {
|
||||||
httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
|
httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
|
||||||
httpEntity = new HttpEntity(formVariableParams, httpHeaders);
|
}
|
||||||
|
if (!formVariableParams.isEmpty()) {
|
||||||
|
formVariableParams.forEach(multiValueMap::add);
|
||||||
|
}
|
||||||
|
httpEntity = new HttpEntity(multiValueMap, httpHeaders);
|
||||||
} else {
|
} else {
|
||||||
httpEntity = new HttpEntity(getHttpHeaders(headerMap));
|
httpEntity = new HttpEntity(getHttpHeaders(headerMap));
|
||||||
}
|
}
|
||||||
return httpEntity;
|
return httpEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置文件
|
||||||
|
*
|
||||||
|
* @param multiValueMap
|
||||||
|
* @param fileMap
|
||||||
|
*/
|
||||||
|
private void setFileVariable(MultiValueMap<String, Object> multiValueMap, Map<String, File> fileMap) {
|
||||||
|
try {
|
||||||
|
for (Map.Entry<String, File> kv : fileMap.entrySet()) {
|
||||||
|
String key = kv.getKey();
|
||||||
|
File file = kv.getValue();
|
||||||
|
FileInputStream fileInputStream = new FileInputStream(file);
|
||||||
|
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
||||||
|
// 1M
|
||||||
|
byte[] buf = new byte[1024 * 1000];
|
||||||
|
for (int len = 0; (len = fileInputStream.read(buf)) > -1; ) {
|
||||||
|
byteArrayOutputStream.write(buf, 0, len);
|
||||||
|
}
|
||||||
|
ByteArrayResource fileAsResource = new ByteArrayResource(byteArrayOutputStream.toByteArray()) {
|
||||||
|
@Override
|
||||||
|
public String getFilename() {
|
||||||
|
return file.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long contentLength() {
|
||||||
|
return file.length();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
multiValueMap.add(key, fileAsResource);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new FileException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置文件
|
||||||
|
*
|
||||||
|
* @param multiValueMap
|
||||||
|
* @param fileInputStreamMap
|
||||||
|
*/
|
||||||
|
private void setFileInputStreamVariable(MultiValueMap<String, Object> multiValueMap, Map<String, RemoteFileInputStream> fileInputStreamMap) {
|
||||||
|
try {
|
||||||
|
for (Map.Entry<String, RemoteFileInputStream> kv : fileInputStreamMap.entrySet()) {
|
||||||
|
String key = kv.getKey();
|
||||||
|
RemoteFileInputStream remoteFileInputStream = kv.getValue();
|
||||||
|
InputStreamResource inputStreamResource = new InputStreamResource(remoteFileInputStream.getInputStream()) {
|
||||||
|
@Override
|
||||||
|
public String getFilename() {
|
||||||
|
return remoteFileInputStream.getFileName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long contentLength() {
|
||||||
|
return remoteFileInputStream.getFileSize();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
multiValueMap.add(key, inputStreamResource);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new FileException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 得到HTTP请求头
|
* 得到HTTP请求头
|
||||||
*
|
*
|
||||||
|
@ -3,17 +3,13 @@ import ink.wgink.annotation.rpc.rest.method.RemoteDeleteMethod;
|
|||||||
import ink.wgink.annotation.rpc.rest.method.RemoteGetMethod;
|
import ink.wgink.annotation.rpc.rest.method.RemoteGetMethod;
|
||||||
import ink.wgink.annotation.rpc.rest.method.RemotePostMethod;
|
import ink.wgink.annotation.rpc.rest.method.RemotePostMethod;
|
||||||
import ink.wgink.annotation.rpc.rest.method.RemotePutMethod;
|
import ink.wgink.annotation.rpc.rest.method.RemotePutMethod;
|
||||||
import ink.wgink.annotation.rpc.rest.params.RemoteJsonBodyParams;
|
import ink.wgink.annotation.rpc.rest.params.*;
|
||||||
import ink.wgink.annotation.rpc.rest.params.RemotePathParams;
|
|
||||||
import ink.wgink.annotation.rpc.rest.params.RemoteQueryParams;
|
|
||||||
import ink.wgink.annotation.rpc.rest.params.RemoteServerParams;
|
|
||||||
import ink.wgink.common.rpc.rest.proxy.RestRemoteProxy;
|
import ink.wgink.common.rpc.rest.proxy.RestRemoteProxy;
|
||||||
import ink.wgink.pojo.dtos.user.UserDTO;
|
import ink.wgink.pojo.dtos.user.UserDTO;
|
||||||
import ink.wgink.pojo.result.SuccessResult;
|
import ink.wgink.pojo.result.SuccessResult;
|
||||||
import ink.wgink.pojo.result.SuccessResultList;
|
import ink.wgink.pojo.result.SuccessResultList;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.io.File;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -48,43 +44,50 @@ public class RemoteTest {
|
|||||||
|
|
||||||
@RemoteDeleteMethod("/app/user-expand/delete-release/{userIds}")
|
@RemoteDeleteMethod("/app/user-expand/delete-release/{userIds}")
|
||||||
SuccessResult deleteRelease(@RemoteServerParams String remotePath, @RemotePathParams("userIds") String userIds);
|
SuccessResult deleteRelease(@RemoteServerParams String remotePath, @RemotePathParams("userIds") String userIds);
|
||||||
|
|
||||||
|
@RemotePostMethod("/api/file/v2/upload-file")
|
||||||
|
String file(@RemoteServerParams String remotePath, @RemoteFileParams("file") File file);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
String remotePath = "http://127.0.0.1:7008/study";
|
String remotePath = "http://127.0.0.1:7008/study";
|
||||||
|
|
||||||
IDemo instance = RestRemoteProxy.getInstance(IDemo.class);
|
IDemo instance = RestRemoteProxy.getInstance(IDemo.class);
|
||||||
UserDTO userDTO = instance.getUser(remotePath, "e48e9c4a-995e-4061-abcd-a3c260c11333");
|
// UserDTO userDTO = instance.getUser(remotePath, "e48e9c4a-995e-4061-abcd-a3c260c11333");
|
||||||
System.out.println(userDTO);
|
// System.out.println(userDTO);
|
||||||
System.out.println();
|
// System.out.println();
|
||||||
|
//
|
||||||
|
// List<UserDTO> userDTOs = instance.listUser(remotePath);
|
||||||
|
// System.out.println(userDTOs.size());
|
||||||
|
// System.out.println();
|
||||||
|
//
|
||||||
|
// SuccessResultList<List<UserDTO>> successResultUserList = instance.listPageUser(remotePath, 1, 5);
|
||||||
|
// System.out.println(successResultUserList.getPage());
|
||||||
|
// System.out.println();
|
||||||
|
//
|
||||||
|
// Map<String, Object> requestBody = new HashMap<>();
|
||||||
|
// requestBody.put("aaa", "aaa1");
|
||||||
|
// SuccessResult successResult = instance.postRelease(remotePath, requestBody);
|
||||||
|
// System.out.println(successResult);
|
||||||
|
// System.out.println();
|
||||||
|
//
|
||||||
|
// List<Map<String, Object>> listBody = new ArrayList<>();
|
||||||
|
// listBody.add(requestBody);
|
||||||
|
// SuccessResult successResult1 = instance.postListRelease(remotePath, listBody);
|
||||||
|
// System.out.println(successResult1);
|
||||||
|
// System.out.println();
|
||||||
|
//
|
||||||
|
// requestBody.put("aaa", "aaa2");
|
||||||
|
// SuccessResult successResult2 = instance.putRelease(remotePath, requestBody);
|
||||||
|
// System.out.println(successResult2);
|
||||||
|
// System.out.println();
|
||||||
|
//
|
||||||
|
// SuccessResult successResult3 = instance.deleteRelease(remotePath, "abc_def_ghi");
|
||||||
|
// System.out.println(successResult3);
|
||||||
|
// System.out.println();
|
||||||
|
|
||||||
List<UserDTO> userDTOs = instance.listUser(remotePath);
|
File file = new File("/Users/wanggeng/Desktop/UploadFiles/files/20220413/b92bcd7e553d4074afd4b36efc3b0899.docx");
|
||||||
System.out.println(userDTOs.size());
|
String file1 = instance.file(remotePath, file);
|
||||||
System.out.println();
|
System.out.println(file1);
|
||||||
|
|
||||||
SuccessResultList<List<UserDTO>> successResultUserList = instance.listPageUser(remotePath, 1, 5);
|
|
||||||
System.out.println(successResultUserList.getPage());
|
|
||||||
System.out.println();
|
|
||||||
|
|
||||||
Map<String, Object> requestBody = new HashMap<>();
|
|
||||||
requestBody.put("aaa", "aaa1");
|
|
||||||
SuccessResult successResult = instance.postRelease(remotePath, requestBody);
|
|
||||||
System.out.println(successResult);
|
|
||||||
System.out.println();
|
|
||||||
|
|
||||||
List<Map<String, Object>> listBody = new ArrayList<>();
|
|
||||||
listBody.add(requestBody);
|
|
||||||
SuccessResult successResult1 = instance.postListRelease(remotePath, listBody);
|
|
||||||
System.out.println(successResult1);
|
|
||||||
System.out.println();
|
|
||||||
|
|
||||||
requestBody.put("aaa", "aaa2");
|
|
||||||
SuccessResult successResult2 = instance.putRelease(remotePath, requestBody);
|
|
||||||
System.out.println(successResult2);
|
|
||||||
System.out.println();
|
|
||||||
|
|
||||||
SuccessResult successResult3 = instance.deleteRelease(remotePath, "abc_def_ghi");
|
|
||||||
System.out.println(successResult3);
|
|
||||||
System.out.println();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user