diff --git a/rest-proxy-core/src/main/java/group/flyfish/rest/constants/RestConstants.java b/rest-proxy-core/src/main/java/group/flyfish/rest/constants/RestConstants.java index 7161203..dba8d41 100644 --- a/rest-proxy-core/src/main/java/group/flyfish/rest/constants/RestConstants.java +++ b/rest-proxy-core/src/main/java/group/flyfish/rest/constants/RestConstants.java @@ -4,6 +4,7 @@ import group.flyfish.rest.core.ThreadPoolManager; import group.flyfish.rest.core.builder.TypedMapBuilder; import group.flyfish.rest.core.resolver.*; import group.flyfish.rest.enums.HttpMethod; +import group.flyfish.rest.enums.ResponseType; import org.apache.http.client.config.RequestConfig; import java.util.Map; @@ -206,4 +207,11 @@ public interface RestConstants { static TypedMapBuilder resolverBuilder() { return TypedMapBuilder.builder(); } + + // 响应类型映射 + Map RESPONSE_TYPE_MAP = TypedMapBuilder.builder() + .with(TypeConstants.STRING, ResponseType.TEXT) + .with(TypeConstants.BYTE_ARRAY, ResponseType.BINARY) + .build(); + } diff --git a/rest-proxy-core/src/main/java/group/flyfish/rest/constants/TypeConstants.java b/rest-proxy-core/src/main/java/group/flyfish/rest/constants/TypeConstants.java new file mode 100644 index 0000000..32fa32a --- /dev/null +++ b/rest-proxy-core/src/main/java/group/flyfish/rest/constants/TypeConstants.java @@ -0,0 +1,13 @@ +package group.flyfish.rest.constants; + +/** + * 类型常量 + * + * @author wangyu + */ +public interface TypeConstants { + + String STRING = "java.lang.String"; + + String BYTE_ARRAY = "[B"; +} diff --git a/rest-proxy-core/src/main/java/group/flyfish/rest/core/client/DefaultRestClient.java b/rest-proxy-core/src/main/java/group/flyfish/rest/core/client/DefaultRestClient.java index 04ca93c..e8771f1 100644 --- a/rest-proxy-core/src/main/java/group/flyfish/rest/core/client/DefaultRestClient.java +++ b/rest-proxy-core/src/main/java/group/flyfish/rest/core/client/DefaultRestClient.java @@ -2,6 +2,7 @@ package group.flyfish.rest.core.client; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.JavaType; +import group.flyfish.rest.constants.RestConstants; import group.flyfish.rest.core.exception.RestClientException; import group.flyfish.rest.core.factory.HttpClientFactoryBean; import group.flyfish.rest.core.factory.HttpClientProvider; @@ -214,7 +215,7 @@ final class DefaultRestClient implements RestClient { @Nullable @Override public T execute(Class clazz) { - this.responseType = ResponseType.OBJECT; + this.responseType = resolveType(clazz); this.resultClass = clazz; try { return innerExecute(); @@ -234,7 +235,7 @@ final class DefaultRestClient implements RestClient { @Nullable @Override public T execute(JavaType type) { - this.responseType = ResponseType.OBJECT; + this.responseType = resolveType(type.getRawClass()); this.resultType = type; try { return innerExecute(); @@ -289,6 +290,7 @@ final class DefaultRestClient implements RestClient { HttpEntity entity = response.getEntity(); if (consumer != null) { consumer.accept(entity); + return null; } return resolveResponse(entity); } else { @@ -305,6 +307,16 @@ final class DefaultRestClient implements RestClient { return null; } + /** + * 解析目标类型 + * + * @param clazz 简单类型 + * @return 响应类型 + */ + private ResponseType resolveType(Class clazz) { + return RestConstants.RESPONSE_TYPE_MAP.getOrDefault(clazz.getName(), ResponseType.OBJECT); + } + /** * 解析结果 * diff --git a/rest-proxy-core/src/main/java/group/flyfish/rest/utils/JacksonUtil.java b/rest-proxy-core/src/main/java/group/flyfish/rest/utils/JacksonUtil.java index 3fe00e8..5e8c1e1 100644 --- a/rest-proxy-core/src/main/java/group/flyfish/rest/utils/JacksonUtil.java +++ b/rest-proxy-core/src/main/java/group/flyfish/rest/utils/JacksonUtil.java @@ -77,9 +77,6 @@ public final class JacksonUtil { if (null == json || "".equals(json)) { return null; } - if (String.class.isAssignableFrom(clazz)) { - return DataUtils.cast(json); - } try { return mapper.readValue(json, clazz); } catch (IOException e) { @@ -89,9 +86,6 @@ public final class JacksonUtil { } public static T fromJson(final String json, JavaType type) { - if (type.isTypeOrSubTypeOf(String.class)) { - return DataUtils.cast(json); - } if (null == json || "".equals(json)) { return null; } diff --git a/rest-proxy-core/src/test/java/group/flyfish/rest/MultipartTest.java b/rest-proxy-core/src/test/java/group/flyfish/rest/MultipartTest.java index 432c681..82dd7c2 100644 --- a/rest-proxy-core/src/test/java/group/flyfish/rest/MultipartTest.java +++ b/rest-proxy-core/src/test/java/group/flyfish/rest/MultipartTest.java @@ -48,6 +48,12 @@ public class MultipartTest { } } + @Test + public void download() { + byte[] data = testRestService.downloadByte(); + System.out.println(data.length); + } + @RestService(baseUrl = "http://localhost:8999", timeout = 500) public interface TestRestService { @@ -56,5 +62,8 @@ public class MultipartTest { @RestApi(uri = "/files", method = HttpMethod.POST) String uploadAnno(@RestPart("fbl") InputStream file, @RestPart.Filename("fbl") String name); + + @RestApi(uri = "/files") + byte[] downloadByte(); } }