diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java
index 062492350..71304dc79 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/json/WxGsonBuilder.java
@@ -1,32 +1,41 @@
-package me.chanjar.weixin.common.util.json;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import me.chanjar.weixin.common.bean.WxAccessToken;
-import me.chanjar.weixin.common.bean.WxNetCheckResult;
-import me.chanjar.weixin.common.bean.menu.WxMenu;
-import me.chanjar.weixin.common.error.WxError;
-import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
-
-/**
- * .
- * @author chanjarster
- */
-public class WxGsonBuilder {
- private static final GsonBuilder INSTANCE = new GsonBuilder();
-
- static {
- INSTANCE.disableHtmlEscaping();
- INSTANCE.registerTypeAdapter(WxAccessToken.class, new WxAccessTokenAdapter());
- INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter());
- INSTANCE.registerTypeAdapter(WxMenu.class, new WxMenuGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMediaUploadResult.class, new WxMediaUploadResultAdapter());
- INSTANCE.registerTypeAdapter(WxNetCheckResult.class, new WxNetCheckResultGsonAdapter());
-
- }
-
- public static Gson create() {
- return INSTANCE.create();
- }
-
-}
+package me.chanjar.weixin.common.util.json;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import me.chanjar.weixin.common.bean.WxAccessToken;
+import me.chanjar.weixin.common.bean.WxNetCheckResult;
+import me.chanjar.weixin.common.bean.menu.WxMenu;
+import me.chanjar.weixin.common.error.WxError;
+import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import java.util.Objects;
+
+/**
+ * .
+ * @author chanjarster
+ */
+public class WxGsonBuilder {
+ private static final GsonBuilder INSTANCE = new GsonBuilder();
+ private static volatile Gson GSON_INSTANCE;
+
+ static {
+ INSTANCE.disableHtmlEscaping();
+ INSTANCE.registerTypeAdapter(WxAccessToken.class, new WxAccessTokenAdapter());
+ INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter());
+ INSTANCE.registerTypeAdapter(WxMenu.class, new WxMenuGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMediaUploadResult.class, new WxMediaUploadResultAdapter());
+ INSTANCE.registerTypeAdapter(WxNetCheckResult.class, new WxNetCheckResultGsonAdapter());
+
+ }
+
+ public static Gson create() {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ synchronized (GSON_INSTANCE) {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ GSON_INSTANCE = INSTANCE.create();
+ }
+ }
+ }
+ return GSON_INSTANCE;
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java
index 16f0108e0..c7179aa16 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/json/WxCpGsonBuilder.java
@@ -1,34 +1,43 @@
-package me.chanjar.weixin.cp.util.json;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import me.chanjar.weixin.common.bean.menu.WxMenu;
-import me.chanjar.weixin.common.error.WxError;
-import me.chanjar.weixin.common.util.json.WxErrorAdapter;
-import me.chanjar.weixin.cp.bean.WxCpChat;
-import me.chanjar.weixin.cp.bean.WxCpDepart;
-import me.chanjar.weixin.cp.bean.WxCpTag;
-import me.chanjar.weixin.cp.bean.WxCpUser;
-
-/**
- * @author Daniel Qian
- */
-public class WxCpGsonBuilder {
-
- private static final GsonBuilder INSTANCE = new GsonBuilder();
-
- static {
- INSTANCE.disableHtmlEscaping();
- INSTANCE.registerTypeAdapter(WxCpChat.class, new WxCpChatGsonAdapter());
- INSTANCE.registerTypeAdapter(WxCpDepart.class, new WxCpDepartGsonAdapter());
- INSTANCE.registerTypeAdapter(WxCpUser.class, new WxCpUserGsonAdapter());
- INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter());
- INSTANCE.registerTypeAdapter(WxMenu.class, new WxCpMenuGsonAdapter());
- INSTANCE.registerTypeAdapter(WxCpTag.class, new WxCpTagGsonAdapter());
- }
-
- public static Gson create() {
- return INSTANCE.create();
- }
-
-}
+package me.chanjar.weixin.cp.util.json;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import me.chanjar.weixin.common.bean.menu.WxMenu;
+import me.chanjar.weixin.common.error.WxError;
+import me.chanjar.weixin.common.util.json.WxErrorAdapter;
+import me.chanjar.weixin.cp.bean.WxCpChat;
+import me.chanjar.weixin.cp.bean.WxCpDepart;
+import me.chanjar.weixin.cp.bean.WxCpTag;
+import me.chanjar.weixin.cp.bean.WxCpUser;
+import java.util.Objects;
+
+/**
+ * @author Daniel Qian
+ */
+public class WxCpGsonBuilder {
+
+ private static final GsonBuilder INSTANCE = new GsonBuilder();
+ private static volatile Gson GSON_INSTANCE;
+
+ static {
+ INSTANCE.disableHtmlEscaping();
+ INSTANCE.registerTypeAdapter(WxCpChat.class, new WxCpChatGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxCpDepart.class, new WxCpDepartGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxCpUser.class, new WxCpUserGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxError.class, new WxErrorAdapter());
+ INSTANCE.registerTypeAdapter(WxMenu.class, new WxCpMenuGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxCpTag.class, new WxCpTagGsonAdapter());
+ }
+
+ public static Gson create() {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ synchronized (GSON_INSTANCE) {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ GSON_INSTANCE = INSTANCE.create();
+ }
+ }
+ }
+ return GSON_INSTANCE;
+ }
+
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java
index 0918935ee..cfa609058 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/json/WxMaGsonBuilder.java
@@ -11,12 +11,14 @@ import cn.binarywang.wx.miniapp.bean.code.WxMaCodeVersionDistribution;
import cn.binarywang.wx.miniapp.json.adaptor.*;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
+import java.util.Objects;
/**
* @author Binary Wang
*/
public class WxMaGsonBuilder {
private static final GsonBuilder INSTANCE = new GsonBuilder();
+ private static volatile Gson GSON_INSTANCE;
static {
INSTANCE.disableHtmlEscaping();
@@ -31,7 +33,14 @@ public class WxMaGsonBuilder {
}
public static Gson create() {
- return INSTANCE.create();
+ if (Objects.isNull(GSON_INSTANCE)) {
+ synchronized (GSON_INSTANCE) {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ GSON_INSTANCE = INSTANCE.create();
+ }
+ }
+ }
+ return GSON_INSTANCE;
}
}
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
index 5f762cc6d..b7773f503 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/json/WxMpGsonBuilder.java
@@ -1,70 +1,79 @@
-package me.chanjar.weixin.mp.util.json;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import me.chanjar.weixin.mp.bean.*;
-import me.chanjar.weixin.mp.bean.card.WxMpCard;
-import me.chanjar.weixin.mp.bean.card.WxMpCardResult;
-import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate;
-import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary;
-import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
-import me.chanjar.weixin.mp.bean.material.*;
-import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardActivateTempInfoResult;
-import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUpdateResult;
-import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUserInfoResult;
-import me.chanjar.weixin.mp.bean.result.*;
-import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage;
-import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry;
-import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
-
-/**
- * @author someone
- */
-public class WxMpGsonBuilder {
-
- private static final GsonBuilder INSTANCE = new GsonBuilder();
-
- static {
- INSTANCE.disableHtmlEscaping();
- INSTANCE.registerTypeAdapter(WxMpKefuMessage.class, new WxMpKefuMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassNews.class, new WxMpMassNewsGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassTagMessage.class, new WxMpMassTagMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassOpenIdsMessage.class, new WxMpMassOpenIdsMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpUser.class, new WxMpUserGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpChangeOpenid.class, new WxMpChangeOpenidGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpUserList.class, new WxUserListGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassVideo.class, new WxMpMassVideoAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassSendResult.class, new WxMpMassSendResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassUploadResult.class, new WxMpMassUploadResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpQrCodeTicket.class, new WxQrCodeTicketAdapter());
- INSTANCE.registerTypeAdapter(WxMpTemplateMessage.class, new WxMpTemplateMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpSubscribeMessage.class, new WxMpSubscribeMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpSemanticQueryResult.class, new WxMpSemanticQueryResultAdapter());
- INSTANCE.registerTypeAdapter(WxDataCubeUserSummary.class, new WxMpUserSummaryGsonAdapter());
- INSTANCE.registerTypeAdapter(WxDataCubeUserCumulate.class, new WxMpUserCumulateGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialUploadResult.class, new WxMpMaterialUploadResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialVideoInfoResult.class, new WxMpMaterialVideoInfoResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialArticleUpdate.class, new WxMpMaterialArticleUpdateGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialCountResult.class, new WxMpMaterialCountResultAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialNews.class, new WxMpMaterialNewsGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpNewsArticle.class, new WxMpNewsArticleGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.class, new WxMpMaterialNewsBatchGetGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.WxMaterialNewsBatchGetNewsItem.class, new WxMpMaterialNewsBatchGetGsonItemAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.class, new WxMpMaterialFileBatchGetGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.WxMaterialFileBatchGetNewsItem.class, new WxMpMaterialFileBatchGetGsonItemAdapter());
- INSTANCE.registerTypeAdapter(WxMpCardResult.class, new WxMpCardResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpCard.class, new WxMpCardGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMassPreviewMessage.class, new WxMpMassPreviewMessageGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMediaImgUploadResult.class, new WxMediaImgUploadResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpTemplateIndustry.class, new WxMpIndustryGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpUserBlacklistGetResult.class, new WxUserBlacklistGetResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMemberCardUserInfoResult.class, new WxMpMemberCardUserInfoResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMemberCardUpdateResult.class, new WxMpMemberCardUpdateResultGsonAdapter());
- INSTANCE.registerTypeAdapter(WxMpMemberCardActivateTempInfoResult.class, new WxMpMemberCardActivateTempInfoResultGsonAdapter());
- }
-
- public static Gson create() {
- return INSTANCE.create();
- }
-
-}
+package me.chanjar.weixin.mp.util.json;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import me.chanjar.weixin.mp.bean.*;
+import me.chanjar.weixin.mp.bean.card.WxMpCard;
+import me.chanjar.weixin.mp.bean.card.WxMpCardResult;
+import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserCumulate;
+import me.chanjar.weixin.mp.bean.datacube.WxDataCubeUserSummary;
+import me.chanjar.weixin.mp.bean.kefu.WxMpKefuMessage;
+import me.chanjar.weixin.mp.bean.material.*;
+import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardActivateTempInfoResult;
+import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUpdateResult;
+import me.chanjar.weixin.mp.bean.card.membercard.WxMpMemberCardUserInfoResult;
+import me.chanjar.weixin.mp.bean.result.*;
+import me.chanjar.weixin.mp.bean.subscribe.WxMpSubscribeMessage;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry;
+import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
+import java.util.Objects;
+
+/**
+ * @author someone
+ */
+public class WxMpGsonBuilder {
+
+ private static final GsonBuilder INSTANCE = new GsonBuilder();
+ private static volatile Gson GSON_INSTANCE;
+
+ static {
+ INSTANCE.disableHtmlEscaping();
+ INSTANCE.registerTypeAdapter(WxMpKefuMessage.class, new WxMpKefuMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassNews.class, new WxMpMassNewsGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassTagMessage.class, new WxMpMassTagMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassOpenIdsMessage.class, new WxMpMassOpenIdsMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpUser.class, new WxMpUserGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpChangeOpenid.class, new WxMpChangeOpenidGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpUserList.class, new WxUserListGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassVideo.class, new WxMpMassVideoAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassSendResult.class, new WxMpMassSendResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassUploadResult.class, new WxMpMassUploadResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpQrCodeTicket.class, new WxQrCodeTicketAdapter());
+ INSTANCE.registerTypeAdapter(WxMpTemplateMessage.class, new WxMpTemplateMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpSubscribeMessage.class, new WxMpSubscribeMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpSemanticQueryResult.class, new WxMpSemanticQueryResultAdapter());
+ INSTANCE.registerTypeAdapter(WxDataCubeUserSummary.class, new WxMpUserSummaryGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxDataCubeUserCumulate.class, new WxMpUserCumulateGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialUploadResult.class, new WxMpMaterialUploadResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialVideoInfoResult.class, new WxMpMaterialVideoInfoResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialArticleUpdate.class, new WxMpMaterialArticleUpdateGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialCountResult.class, new WxMpMaterialCountResultAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialNews.class, new WxMpMaterialNewsGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpNewsArticle.class, new WxMpNewsArticleGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.class, new WxMpMaterialNewsBatchGetGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialNewsBatchGetResult.WxMaterialNewsBatchGetNewsItem.class, new WxMpMaterialNewsBatchGetGsonItemAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.class, new WxMpMaterialFileBatchGetGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMaterialFileBatchGetResult.WxMaterialFileBatchGetNewsItem.class, new WxMpMaterialFileBatchGetGsonItemAdapter());
+ INSTANCE.registerTypeAdapter(WxMpCardResult.class, new WxMpCardResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpCard.class, new WxMpCardGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMassPreviewMessage.class, new WxMpMassPreviewMessageGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMediaImgUploadResult.class, new WxMediaImgUploadResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpTemplateIndustry.class, new WxMpIndustryGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpUserBlacklistGetResult.class, new WxUserBlacklistGetResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMemberCardUserInfoResult.class, new WxMpMemberCardUserInfoResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMemberCardUpdateResult.class, new WxMpMemberCardUpdateResultGsonAdapter());
+ INSTANCE.registerTypeAdapter(WxMpMemberCardActivateTempInfoResult.class, new WxMpMemberCardActivateTempInfoResultGsonAdapter());
+ }
+
+ public static Gson create() {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ synchronized (GSON_INSTANCE) {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ GSON_INSTANCE = INSTANCE.create();
+ }
+ }
+ }
+ return GSON_INSTANCE;
+ }
+
+}
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java
index 325383ebf..cfed3f084 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/util/json/WxOpenGsonBuilder.java
@@ -7,6 +7,7 @@ import me.chanjar.weixin.open.bean.WxOpenComponentAccessToken;
import me.chanjar.weixin.open.bean.auth.WxOpenAuthorizationInfo;
import me.chanjar.weixin.open.bean.auth.WxOpenAuthorizerInfo;
import me.chanjar.weixin.open.bean.result.*;
+import java.util.Objects;
/**
* @author 007
@@ -14,6 +15,7 @@ import me.chanjar.weixin.open.bean.result.*;
public class WxOpenGsonBuilder {
private static final GsonBuilder INSTANCE = new GsonBuilder();
+ private static volatile Gson GSON_INSTANCE;
static {
INSTANCE.disableHtmlEscaping();
@@ -26,11 +28,17 @@ public class WxOpenGsonBuilder {
INSTANCE.registerTypeAdapter(WxOpenAuthorizerOptionResult.class, new WxOpenAuthorizerOptionResultGsonAdapter());
INSTANCE.registerTypeAdapter(WxFastMaAccountBasicInfoResult.class, new WxFastMaAccountBasicInfoGsonAdapter());
INSTANCE.registerTypeAdapter(WxOpenAuthorizerListResult.class, new WxOpenAuthorizerListResultGsonAdapter());
-
}
public static Gson create() {
- return INSTANCE.create();
+ if (Objects.isNull(GSON_INSTANCE)) {
+ synchronized (GSON_INSTANCE) {
+ if (Objects.isNull(GSON_INSTANCE)) {
+ GSON_INSTANCE = INSTANCE.create();
+ }
+ }
+ }
+ return GSON_INSTANCE;
}
}