Skip to content

Commit 5c266d5

Browse files
gexiangdongbinarywang
authored andcommitted
🎨 【小程序】同城配送查询门店余额接口补充了几个遗漏属性,同时优化代码,避免可能出现的NPE问题
1 parent 9c6fca7 commit 5c266d5

File tree

3 files changed

+138
-8
lines changed

3 files changed

+138
-8
lines changed

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ public String post(String url, String postData) throws WxErrorException {
302302
if (isApiSignatureRequired(url)) {
303303
// 接口需要签名
304304
log.debug("已经配置接口需要签名,接口{}将走加密访问路径", url);
305-
JsonObject jsonObject = GSON.fromJson(postData, JsonObject.class);
305+
JsonObject jsonObject = GSON.fromJson(postData == null ? "{}" : postData, JsonObject.class);
306306
return postWithSignature(url, jsonObject);
307307
} else {
308308
return execute(SimplePostRequestExecutor.create(this), url, postData);
@@ -323,12 +323,12 @@ public String post(String url, Object obj) throws WxErrorException {
323323

324324
@Override
325325
public String post(String url, ToJson obj) throws WxErrorException {
326-
return this.post(url, obj.toJson());
326+
return this.post(url, obj == null ? "{}" : obj.toJson());
327327
}
328328

329329
@Override
330330
public String post(String url, JsonObject jsonObject) throws WxErrorException {
331-
return this.post(url, jsonObject.toString());
331+
return this.post(url, jsonObject == null ? "{}" : jsonObject.toString());
332332
}
333333

334334
@Override
@@ -845,7 +845,12 @@ public String postWithSignature(String url, Object obj) throws WxErrorException
845845
new GsonBuilder()
846846
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
847847
.create();
848-
JsonObject jsonObject = gson.toJsonTree(obj).getAsJsonObject();
848+
JsonObject jsonObject;
849+
if (obj == null) {
850+
jsonObject = gson.fromJson("{}", JsonObject.class);
851+
} else {
852+
jsonObject = gson.toJsonTree(obj).getAsJsonObject();
853+
}
849854
return this.postWithSignature(url, jsonObject);
850855
}
851856

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

Lines changed: 48 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class WxMaStoreBalance {
1313
private String appid;
1414
private int allBalance;
1515

16-
private List<Detail> balanceDetail;
16+
private List<BalanceDetail> balanceDetail;
1717

1818
public String getWxStoreId() {
1919
return wxStoreId;
@@ -39,11 +39,11 @@ public void setAllBalance(int allBalance) {
3939
this.allBalance = allBalance;
4040
}
4141

42-
public List<Detail> getBalanceDetail() {
42+
public List<BalanceDetail> getBalanceDetail() {
4343
return balanceDetail;
4444
}
4545

46-
public void setBalanceDetail(List<Detail> balanceDetail) {
46+
public void setBalanceDetail(List<BalanceDetail> balanceDetail) {
4747
this.balanceDetail = balanceDetail;
4848
}
4949

@@ -52,7 +52,51 @@ public String toString() {
5252
return ToStringBuilder.reflectionToString(this);
5353
}
5454

55-
public static class Detail {
55+
public static class BalanceDetail {
56+
private int balance;
57+
private String serviceTransId;
58+
private String serviceTransName;
59+
private List<OrderDetail> orderList;
60+
61+
public int getBalance() {
62+
return balance;
63+
}
64+
65+
public void setBalance(int balance) {
66+
this.balance = balance;
67+
}
68+
69+
public String getServiceTransId() {
70+
return serviceTransId;
71+
}
72+
73+
public void setServiceTransId(String serviceTransId) {
74+
this.serviceTransId = serviceTransId;
75+
}
76+
77+
public String getServiceTransName() {
78+
return serviceTransName;
79+
}
80+
81+
public void setServiceTransName(String serviceTransName) {
82+
this.serviceTransName = serviceTransName;
83+
}
84+
85+
public List<OrderDetail> getOrderList() {
86+
return orderList;
87+
}
88+
89+
public void setOrderList(List<OrderDetail> orderList) {
90+
this.orderList = orderList;
91+
}
92+
93+
@Override
94+
public String toString() {
95+
return ToStringBuilder.reflectionToString(this);
96+
}
97+
}
98+
99+
public static class OrderDetail {
56100
private String payorderId;
57101
private int chargeAmt;
58102
private int unusedAmt;

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

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@
88
import cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants;
99
import cn.binarywang.wx.miniapp.test.ApiTestModule;
1010
import cn.binarywang.wx.miniapp.test.TestConfig;
11+
import com.google.gson.JsonObject;
1112
import com.google.inject.Inject;
1213
import java.util.ArrayList;
1314
import java.util.List;
15+
import me.chanjar.weixin.common.bean.ToJson;
1416
import me.chanjar.weixin.common.error.WxErrorException;
1517
import org.slf4j.Logger;
1618
import org.slf4j.LoggerFactory;
@@ -35,6 +37,85 @@ public void testApiSignature() throws Exception {
3537
logger.info("apply 额度剩余 :{}", result.getQuota());
3638
}
3739

40+
@Test
41+
public void testApiGetPostNullData() throws Exception {
42+
try {
43+
wxService.get(WxMaApiUrlConstants.Analysis.GET_USER_PORTRAIT_URL, null);
44+
} catch (NullPointerException npe) {
45+
logger.error("NullPointerException", npe);
46+
fail("遇到空指针 get(url, null)");
47+
} catch (WxErrorException wxErrorException) {
48+
// 这个是正常的,因为这里的调用没按照接口规则
49+
}
50+
// 走加密路径url
51+
try {
52+
wxService.post(WxMaApiUrlConstants.OpenApi.CLEAR_QUOTA, (Object) null);
53+
} catch (NullPointerException npe) {
54+
logger.error("NullPointerException", npe);
55+
fail("遇到空指针 post(url, Object null)");
56+
} catch (WxErrorException wxErrorException) {
57+
// 这个是正常的,因为这里的调用没按照接口规则
58+
}
59+
try {
60+
wxService.post(WxMaApiUrlConstants.OpenApi.CLEAR_QUOTA, (String) null);
61+
} catch (NullPointerException npe) {
62+
logger.error("NullPointerException", npe);
63+
fail("遇到空指针 post(url, String null)");
64+
} catch (WxErrorException wxErrorException) {
65+
// 这个是正常的,因为这里的调用没按照接口规则
66+
}
67+
try {
68+
wxService.post(WxMaApiUrlConstants.OpenApi.CLEAR_QUOTA, (JsonObject) null);
69+
} catch (NullPointerException npe) {
70+
logger.error("NullPointerException", npe);
71+
fail("遇到空指针 post(url, JsonObject null)");
72+
} catch (WxErrorException wxErrorException) {
73+
// 这个是正常的,因为这里的调用没按照接口规则
74+
}
75+
try {
76+
wxService.post(WxMaApiUrlConstants.OpenApi.CLEAR_QUOTA, (ToJson) null);
77+
} catch (NullPointerException npe) {
78+
logger.error("NullPointerException", npe);
79+
fail("遇到空指针 post(url, ToJson null)");
80+
} catch (WxErrorException wxErrorException) {
81+
// 这个是正常的,因为这里的调用没按照接口规则
82+
}
83+
84+
// 不走加密路径URL
85+
try {
86+
wxService.post(WxMaApiUrlConstants.Intracity.APPLY_URL, (Object) null);
87+
} catch (NullPointerException npe) {
88+
logger.error("NullPointerException", npe);
89+
fail("遇到空指针 post(url, Object null)");
90+
} catch (WxErrorException wxErrorException) {
91+
// 这个是正常的,因为这里的调用没按照接口规则
92+
}
93+
try {
94+
wxService.post(WxMaApiUrlConstants.Intracity.APPLY_URL, (String) null);
95+
} catch (NullPointerException npe) {
96+
logger.error("NullPointerException", npe);
97+
fail("遇到空指针 post(url, String null)");
98+
} catch (WxErrorException wxErrorException) {
99+
// 这个是正常的,因为这里的调用没按照接口规则
100+
}
101+
try {
102+
wxService.post(WxMaApiUrlConstants.Intracity.APPLY_URL, (JsonObject) null);
103+
} catch (NullPointerException npe) {
104+
logger.error("NullPointerException", npe);
105+
fail("遇到空指针 post(url, JsonObject null)");
106+
} catch (WxErrorException wxErrorException) {
107+
// 这个是正常的,因为这里的调用没按照接口规则
108+
}
109+
try {
110+
wxService.post(WxMaApiUrlConstants.Intracity.APPLY_URL, (ToJson) null);
111+
} catch (NullPointerException npe) {
112+
logger.error("NullPointerException", npe);
113+
fail("遇到空指针 post(url, ToJson null)");
114+
} catch (WxErrorException wxErrorException) {
115+
// 这个是正常的,因为这里的调用没按照接口规则
116+
}
117+
}
118+
38119
@Test
39120
public void testApply() throws Exception {
40121
logger.debug("testApply");

0 commit comments

Comments
 (0)