diff --git a/Milkomeda/pom.xml b/Milkomeda/pom.xml index 1b5383aa..62ec2c1d 100755 --- a/Milkomeda/pom.xml +++ b/Milkomeda/pom.xml @@ -11,7 +11,7 @@ 1.8 - 3.12.2-SNAPSHOT + 3.12.3-SNAPSHOT 2.2.4 Hoxton.RELEASE 2.1.1 @@ -67,7 +67,7 @@ sonatype-oss-release - 3.12.2 + 3.12.3 diff --git a/Milkomeda/src/main/java/com/github/yizzuide/milkomeda/echo/AbstractRequest.java b/Milkomeda/src/main/java/com/github/yizzuide/milkomeda/echo/AbstractRequest.java index 71ef96b4..a3f78e96 100644 --- a/Milkomeda/src/main/java/com/github/yizzuide/milkomeda/echo/AbstractRequest.java +++ b/Milkomeda/src/main/java/com/github/yizzuide/milkomeda/echo/AbstractRequest.java @@ -25,7 +25,7 @@ * * @author yizzuide * @since 1.13.0 - * @version 3.12.2 + * @version 3.12.3 * Create at 2019/09/21 16:48 */ @Slf4j @@ -195,7 +195,7 @@ public EchoResponseData sendRequest(HttpMethod method, String url, Map responseData = createReturnData(responseEntity, specType, useStandardHTTP); + EchoResponseData responseData = createReturnData(responseEntity, specType, useStandardHTTP, forceCamel); if (useStandardHTTP) { responseData.setCode(String.valueOf(request.getStatusCodeValue())); } @@ -312,14 +312,15 @@ protected boolean useStandardHTTP() { /** * 返回数据类型的模板方法 * + * @param EchoResponseData的data字段类型 * @param respData 第三方方响应的数据,Map或List * @param specType ResponseData的data字段类型 - * @param EchoResponseData的data字段类型 * @param useStandardHTTP 是否使用标准的HTTP标准码 + * @param forceCamel data里的字段是否强制下划线转驼峰 * @return 统一响应数据类 * @throws EchoException 请求异常 */ - protected abstract EchoResponseData createReturnData(Object respData, TypeReference specType, boolean useStandardHTTP) throws EchoException; + protected abstract EchoResponseData createReturnData(Object respData, TypeReference specType, boolean useStandardHTTP, boolean forceCamel) throws EchoException; /** * 子类需要实现的参数签名(默认不应用签名) diff --git a/Milkomeda/src/main/java/com/github/yizzuide/milkomeda/echo/EchoRequest.java b/Milkomeda/src/main/java/com/github/yizzuide/milkomeda/echo/EchoRequest.java index b13cc042..c6b676b0 100644 --- a/Milkomeda/src/main/java/com/github/yizzuide/milkomeda/echo/EchoRequest.java +++ b/Milkomeda/src/main/java/com/github/yizzuide/milkomeda/echo/EchoRequest.java @@ -19,7 +19,7 @@ * * @author yizzuide * @since 1.13.0 - * @version 3.12.2 + * @version 3.12.3 * Create at 2019/09/21 19:00 */ @Slf4j @@ -27,7 +27,7 @@ public abstract class EchoRequest extends AbstractRequest { @Override @SuppressWarnings({"unchecked", "rawtypes"}) - protected EchoResponseData createReturnData(Object respData, TypeReference specType, boolean useStandardHTTP) throws EchoException { + protected EchoResponseData createReturnData(Object respData, TypeReference specType, boolean useStandardHTTP, boolean forceCamel) throws EchoException { if (null == respData) { return responseData(); } @@ -98,8 +98,17 @@ protected EchoResponseData createReturnData(Object respData, TypeReferenc return responseData; } - // 字符串类型直接返回 - if (isStringType && responseData.getData() instanceof String) { + // data内容识别转换 + if (responseData.getData() instanceof String) { + // 指定的为字符串类型直接返回 + if (isStringType) { + return responseData; + } + if (forceCamel) { + responseData.setData(JSONUtil.toCamel(responseData.getData(), specType)); + return responseData; + } + responseData.setData(JSONUtil.nativeRead((String) responseData.getData(), specType)); return responseData; } diff --git a/Milkomeda/src/main/java/com/github/yizzuide/milkomeda/util/JSONUtil.java b/Milkomeda/src/main/java/com/github/yizzuide/milkomeda/util/JSONUtil.java index cc6032ce..2f5ea987 100644 --- a/Milkomeda/src/main/java/com/github/yizzuide/milkomeda/util/JSONUtil.java +++ b/Milkomeda/src/main/java/com/github/yizzuide/milkomeda/util/JSONUtil.java @@ -17,7 +17,7 @@ * * @author yizzuide * @since 0.2.0 - * @version 3.12.2 + * @version 3.12.3 * Create at 2019/04/11 22:07 */ @Slf4j @@ -109,12 +109,26 @@ public static T nativeRead(String json, JavaType javaType) { public static T toCamel(Object data, TypeReference clazz) throws IOException { ObjectMapper mapper = new ObjectMapper(); Object result = data; - if (data instanceof Map) { + boolean isMap = false; + boolean isList = false; + if (data instanceof String) { + isMap = data.toString().matches("^\\s*\\{.+"); + isList = data.toString().matches("^\\s*\\[.+"); + if (isMap) { + data = JSONUtil.parseMap((String) data, String.class, Object.class); + } else { + data = JSONUtil.parseList((String) data, Map.class); + } + if (data == null) { + return null; + } + } + if (isMap || data instanceof Map) { result = toCamel((Map) data); if (Map.class == TypeUtil.type2Class(clazz)) { return (T) result; } - } else if (data instanceof List) { + } else if (isList || data instanceof List) { List list = (List) data; List targetList = new ArrayList<>(); for (Map m : list) { diff --git a/MilkomedaDemo/pom.xml b/MilkomedaDemo/pom.xml index b417ece8..cece4a2b 100644 --- a/MilkomedaDemo/pom.xml +++ b/MilkomedaDemo/pom.xml @@ -20,7 +20,7 @@ UTF-8 1.8 Hoxton.RELEASE - 3.12.2-SNAPSHOT + 3.12.3-SNAPSHOT 2.1.1 3.12.5 3.4.14 diff --git a/MilkomedaDemo/src/main/java/com/github/yizzuide/milkomeda/demo/echo/web/controller/EchoController.java b/MilkomedaDemo/src/main/java/com/github/yizzuide/milkomeda/demo/echo/web/controller/EchoController.java index 57753487..20e6b20b 100644 --- a/MilkomedaDemo/src/main/java/com/github/yizzuide/milkomeda/demo/echo/web/controller/EchoController.java +++ b/MilkomedaDemo/src/main/java/com/github/yizzuide/milkomeda/demo/echo/web/controller/EchoController.java @@ -3,6 +3,7 @@ import com.github.yizzuide.milkomeda.echo.EchoException; import com.github.yizzuide.milkomeda.echo.EchoRequest; import com.github.yizzuide.milkomeda.echo.EchoResponseData; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; @@ -43,12 +44,7 @@ public ResponseEntity> openAccount(@RequestBody Map(){ - private static final long serialVersionUID = -7494033976315538458L; - { - put("order_id", "12343243434324324"); - }}); - + data.put("data", "{\"order_id\":\"12343243434324324\"}"); } return ResponseEntity.ok(data); } @@ -66,6 +62,7 @@ public ResponseEntity> requestOpenAccount() { // TypeReference比用xxx.class在泛型的支持上要强得多,IDE也会智能检测匹配成功 // 如果第三方的data是一个json数组,可以传new TypeReference>>() {},返回结果用EchoResponseData>>接收 // EchoResponseData> responseData = simpleEchoRequest.sendPostForResult("http://localhost:8091/echo/account/open", reqParams, new TypeReference>() {}, true); + //EchoResponseData responseData = simpleEchoRequest.sendRequest(HttpMethod.POST, "http://localhost:8091/echo/account/open", null, reqParams, new TypeReference(){}, true); EchoResponseData> responseData = simpleEchoRequest.fetch(HttpMethod.POST, "http://localhost:8091/echo/account/open", reqParams); log.info("responseData: {}", responseData); } catch (EchoException e) { @@ -78,4 +75,9 @@ public ResponseEntity> requestOpenAccount() { data.put("error_msg", ""); return ResponseEntity.ok(data); } + + @Data + static class PayVo { + private String orderId; + } }