浏览代码

:art: 【小程序】同城配送查询门店余额接口补充了几个遗漏属性,同时优化代码,避免可能出现的NPE问题

GeXiangDong 6 月之前
父节点
当前提交
5c266d546f

+ 9 - 4
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java

@@ -302,7 +302,7 @@ public abstract class BaseWxMaServiceImpl<H, P> implements WxMaService, RequestH
     if (isApiSignatureRequired(url)) {
       // 接口需要签名
       log.debug("已经配置接口需要签名,接口{}将走加密访问路径", url);
-      JsonObject jsonObject = GSON.fromJson(postData, JsonObject.class);
+      JsonObject jsonObject = GSON.fromJson(postData == null ? "{}" : postData, JsonObject.class);
       return postWithSignature(url, jsonObject);
     } else {
       return execute(SimplePostRequestExecutor.create(this), url, postData);
@@ -323,12 +323,12 @@ public abstract class BaseWxMaServiceImpl<H, P> implements WxMaService, RequestH
 
   @Override
   public String post(String url, ToJson obj) throws WxErrorException {
-    return this.post(url, obj.toJson());
+    return this.post(url, obj == null ? "{}" : obj.toJson());
   }
 
   @Override
   public String post(String url, JsonObject jsonObject) throws WxErrorException {
-    return this.post(url, jsonObject.toString());
+    return this.post(url, jsonObject == null ? "{}" : jsonObject.toString());
   }
 
   @Override
@@ -845,7 +845,12 @@ public abstract class BaseWxMaServiceImpl<H, P> implements WxMaService, RequestH
         new GsonBuilder()
             .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
             .create();
-    JsonObject jsonObject = gson.toJsonTree(obj).getAsJsonObject();
+    JsonObject jsonObject;
+    if (obj == null) {
+      jsonObject = gson.fromJson("{}", JsonObject.class);
+    } else {
+      jsonObject = gson.toJsonTree(obj).getAsJsonObject();
+    }
     return this.postWithSignature(url, jsonObject);
   }
 

+ 48 - 4
weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/intractiy/WxMaStoreBalance.java

@@ -13,7 +13,7 @@ public class WxMaStoreBalance {
   private String appid;
   private int allBalance;
 
-  private List<Detail> balanceDetail;
+  private List<BalanceDetail> balanceDetail;
 
   public String getWxStoreId() {
     return wxStoreId;
@@ -39,11 +39,11 @@ public class WxMaStoreBalance {
     this.allBalance = allBalance;
   }
 
-  public List<Detail> getBalanceDetail() {
+  public List<BalanceDetail> getBalanceDetail() {
     return balanceDetail;
   }
 
-  public void setBalanceDetail(List<Detail> balanceDetail) {
+  public void setBalanceDetail(List<BalanceDetail> balanceDetail) {
     this.balanceDetail = balanceDetail;
   }
 
@@ -52,7 +52,51 @@ public class WxMaStoreBalance {
     return ToStringBuilder.reflectionToString(this);
   }
 
-  public static class Detail {
+  public static class BalanceDetail {
+    private int balance;
+    private String serviceTransId;
+    private String serviceTransName;
+    private List<OrderDetail> orderList;
+
+    public int getBalance() {
+      return balance;
+    }
+
+    public void setBalance(int balance) {
+      this.balance = balance;
+    }
+
+    public String getServiceTransId() {
+      return serviceTransId;
+    }
+
+    public void setServiceTransId(String serviceTransId) {
+      this.serviceTransId = serviceTransId;
+    }
+
+    public String getServiceTransName() {
+      return serviceTransName;
+    }
+
+    public void setServiceTransName(String serviceTransName) {
+      this.serviceTransName = serviceTransName;
+    }
+
+    public List<OrderDetail> getOrderList() {
+      return orderList;
+    }
+
+    public void setOrderList(List<OrderDetail> orderList) {
+      this.orderList = orderList;
+    }
+
+    @Override
+    public String toString() {
+      return ToStringBuilder.reflectionToString(this);
+    }
+  }
+
+  public static class OrderDetail {
     private String payorderId;
     private int chargeAmt;
     private int unusedAmt;

+ 81 - 0
weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaIntracityServiceImpleTest.java

@@ -8,9 +8,11 @@ import cn.binarywang.wx.miniapp.bean.openapi.WxMiniGetApiQuotaResult;
 import cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants;
 import cn.binarywang.wx.miniapp.test.ApiTestModule;
 import cn.binarywang.wx.miniapp.test.TestConfig;
+import com.google.gson.JsonObject;
 import com.google.inject.Inject;
 import java.util.ArrayList;
 import java.util.List;
+import me.chanjar.weixin.common.bean.ToJson;
 import me.chanjar.weixin.common.error.WxErrorException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -36,6 +38,85 @@ public class WxMaIntracityServiceImpleTest {
   }
 
   @Test
+  public void testApiGetPostNullData() throws Exception {
+    try {
+      wxService.get(WxMaApiUrlConstants.Analysis.GET_USER_PORTRAIT_URL, null);
+    } catch (NullPointerException npe) {
+      logger.error("NullPointerException", npe);
+      fail("遇到空指针 get(url, null)");
+    } catch (WxErrorException wxErrorException) {
+      // 这个是正常的,因为这里的调用没按照接口规则
+    }
+    // 走加密路径url
+    try {
+      wxService.post(WxMaApiUrlConstants.OpenApi.CLEAR_QUOTA, (Object) null);
+    } catch (NullPointerException npe) {
+      logger.error("NullPointerException", npe);
+      fail("遇到空指针 post(url, Object null)");
+    } catch (WxErrorException wxErrorException) {
+      // 这个是正常的,因为这里的调用没按照接口规则
+    }
+    try {
+      wxService.post(WxMaApiUrlConstants.OpenApi.CLEAR_QUOTA, (String) null);
+    } catch (NullPointerException npe) {
+      logger.error("NullPointerException", npe);
+      fail("遇到空指针 post(url, String null)");
+    } catch (WxErrorException wxErrorException) {
+      // 这个是正常的,因为这里的调用没按照接口规则
+    }
+    try {
+      wxService.post(WxMaApiUrlConstants.OpenApi.CLEAR_QUOTA, (JsonObject) null);
+    } catch (NullPointerException npe) {
+      logger.error("NullPointerException", npe);
+      fail("遇到空指针 post(url, JsonObject null)");
+    } catch (WxErrorException wxErrorException) {
+      // 这个是正常的,因为这里的调用没按照接口规则
+    }
+    try {
+      wxService.post(WxMaApiUrlConstants.OpenApi.CLEAR_QUOTA, (ToJson) null);
+    } catch (NullPointerException npe) {
+      logger.error("NullPointerException", npe);
+      fail("遇到空指针 post(url, ToJson null)");
+    } catch (WxErrorException wxErrorException) {
+      // 这个是正常的,因为这里的调用没按照接口规则
+    }
+
+    // 不走加密路径URL
+    try {
+      wxService.post(WxMaApiUrlConstants.Intracity.APPLY_URL, (Object) null);
+    } catch (NullPointerException npe) {
+      logger.error("NullPointerException", npe);
+      fail("遇到空指针 post(url, Object null)");
+    } catch (WxErrorException wxErrorException) {
+      // 这个是正常的,因为这里的调用没按照接口规则
+    }
+    try {
+      wxService.post(WxMaApiUrlConstants.Intracity.APPLY_URL, (String) null);
+    } catch (NullPointerException npe) {
+      logger.error("NullPointerException", npe);
+      fail("遇到空指针 post(url, String null)");
+    } catch (WxErrorException wxErrorException) {
+      // 这个是正常的,因为这里的调用没按照接口规则
+    }
+    try {
+      wxService.post(WxMaApiUrlConstants.Intracity.APPLY_URL, (JsonObject) null);
+    } catch (NullPointerException npe) {
+      logger.error("NullPointerException", npe);
+      fail("遇到空指针 post(url, JsonObject null)");
+    } catch (WxErrorException wxErrorException) {
+      // 这个是正常的,因为这里的调用没按照接口规则
+    }
+    try {
+      wxService.post(WxMaApiUrlConstants.Intracity.APPLY_URL, (ToJson) null);
+    } catch (NullPointerException npe) {
+      logger.error("NullPointerException", npe);
+      fail("遇到空指针 post(url, ToJson null)");
+    } catch (WxErrorException wxErrorException) {
+      // 这个是正常的,因为这里的调用没按照接口规则
+    }
+  }
+
+  @Test
   public void testApply() throws Exception {
     logger.debug("testApply");
     try {